diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/packet-dcerpc-svcctl.c | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-dcerpc-svcctl.c')
-rw-r--r-- | epan/dissectors/packet-dcerpc-svcctl.c | 9636 |
1 files changed, 9636 insertions, 0 deletions
diff --git a/epan/dissectors/packet-dcerpc-svcctl.c b/epan/dissectors/packet-dcerpc-svcctl.c new file mode 100644 index 00000000..a165d167 --- /dev/null +++ b/epan/dissectors/packet-dcerpc-svcctl.c @@ -0,0 +1,9636 @@ +/* DO NOT EDIT + This file was automatically generated by Pidl + from svcctl.idl and svcctl.cnf. + + Pidl is a perl based IDL compiler for DCE/RPC idl files. + It is maintained by the Samba team, not the Wireshark team. + Instructions on how to download and install Pidl can be + found at https://gitlab.com/wireshark/wireshark/-/wikis/Pidl +*/ + + +#include "config.h" +#include <glib.h> +#include <string.h> +#include <epan/packet.h> + +#include "packet-dcerpc.h" +#include "packet-dcerpc-nt.h" +#include "packet-windows-common.h" +#include "packet-dcerpc-svcctl.h" +void proto_register_dcerpc_svcctl(void); +void proto_reg_handoff_dcerpc_svcctl(void); + +/* Ett declarations */ +static gint ett_svcctl_service = -1; +static gint ett_svcctl_service_name = -1; +static gint ett_svcctl_display_name = -1; +static gint ett_dcerpc_svcctl = -1; +static gint ett_svcctl_security_secinfo = -1; +static gint ett_svcctl_SERVICE_LOCK_STATUS = -1; +static gint ett_svcctl_svcctl_ControlsAccepted = -1; +static gint ett_svcctl_SERVICE_STATUS = -1; +static gint ett_svcctl_SERVICE_STATUS_PROCESS = -1; +static gint ett_svcctl_ENUM_SERVICE_STATUSW = -1; +static gint ett_svcctl_ENUM_SERVICE_STATUSA = -1; +static gint ett_svcctl_svcctl_MgrAccessMask = -1; +static gint ett_svcctl_svcctl_ServiceAccessMask = -1; +static gint ett_svcctl_QUERY_SERVICE_CONFIG = -1; +static gint ett_svcctl_svcctl_ArgumentString = -1; +static gint ett_svcctl_svcctl_ArgumentStringA = -1; + + +/* Header field declarations */ +static gint hf_svcctl_ENUM_SERVICE_STATUSA_display_name = -1; +static gint hf_svcctl_ENUM_SERVICE_STATUSA_service_name = -1; +static gint hf_svcctl_ENUM_SERVICE_STATUSA_status = -1; +static gint hf_svcctl_ENUM_SERVICE_STATUSW_display_name = -1; +static gint hf_svcctl_ENUM_SERVICE_STATUSW_service_name = -1; +static gint hf_svcctl_ENUM_SERVICE_STATUSW_status = -1; +static gint hf_svcctl_EnumServicesStatusExA_group_name = -1; +static gint hf_svcctl_EnumServicesStatusExA_info_level = -1; +static gint hf_svcctl_EnumServicesStatusExA_needed = -1; +static gint hf_svcctl_EnumServicesStatusExA_offered = -1; +static gint hf_svcctl_EnumServicesStatusExA_resume_handle = -1; +static gint hf_svcctl_EnumServicesStatusExA_scm_handle = -1; +static gint hf_svcctl_EnumServicesStatusExA_service_returned = -1; +static gint hf_svcctl_EnumServicesStatusExA_service_type = -1; +static gint hf_svcctl_EnumServicesStatusExA_services = -1; +static gint hf_svcctl_EnumServicesStatusExA_state = -1; +static gint hf_svcctl_EnumServicesStatusExW_group_name = -1; +static gint hf_svcctl_EnumServicesStatusExW_info_level = -1; +static gint hf_svcctl_EnumServicesStatusExW_needed = -1; +static gint hf_svcctl_EnumServicesStatusExW_offered = -1; +static gint hf_svcctl_EnumServicesStatusExW_resume_handle = -1; +static gint hf_svcctl_EnumServicesStatusExW_scmanager = -1; +static gint hf_svcctl_EnumServicesStatusExW_service_returned = -1; +static gint hf_svcctl_EnumServicesStatusExW_service_type = -1; +static gint hf_svcctl_EnumServicesStatusExW_services = -1; +static gint hf_svcctl_EnumServicesStatusExW_state = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_dependencies = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_displayname = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_error_control = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_executablepath = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_loadordergroup = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_service_type = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_start_type = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_startname = -1; +static gint hf_svcctl_QUERY_SERVICE_CONFIG_tag_id = -1; +static gint hf_svcctl_SERVICE_LOCK_STATUS_is_locked = -1; +static gint hf_svcctl_SERVICE_LOCK_STATUS_lock_duration = -1; +static gint hf_svcctl_SERVICE_LOCK_STATUS_lock_owner = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_check_point = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_controls_accepted = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_process_id = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_service_exit_code = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_service_flags = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_state = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_type = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_wait_hint = -1; +static gint hf_svcctl_SERVICE_STATUS_PROCESS_win32_exit_code = -1; +static gint hf_svcctl_SERVICE_STATUS_check_point = -1; +static gint hf_svcctl_SERVICE_STATUS_controls_accepted = -1; +static gint hf_svcctl_SERVICE_STATUS_service_exit_code = -1; +static gint hf_svcctl_SERVICE_STATUS_state = -1; +static gint hf_svcctl_SERVICE_STATUS_type = -1; +static gint hf_svcctl_SERVICE_STATUS_wait_hint = -1; +static gint hf_svcctl_SERVICE_STATUS_win32_exit_code = -1; +static gint hf_svcctl_opnum = -1; +static gint hf_svcctl_service_buffer_size = -1; +static gint hf_svcctl_service_referent_id = -1; +static gint hf_svcctl_svcctl_ArgumentStringA_string = -1; +static gint hf_svcctl_svcctl_ArgumentString_string = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfig2A_info = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfig2A_info_level = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfig2A_service_handle = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfig2W_handle = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfig2W_info = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfig2W_info_level = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_binary_path = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_dependencies = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_display_name = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_error_control = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_load_order_group = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_password = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_service_handle = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_service_start_name = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_service_type = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_start_type = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigA_tag_id = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_binary_path = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_dependencies = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_display_name = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_dwDependSize = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_dwPwSize = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_error_control = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_load_order_group = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_password = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_service_handle = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_service_start_name = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_service_type = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_start_type = -1; +static gint hf_svcctl_svcctl_ChangeServiceConfigW_tag_id = -1; +static gint hf_svcctl_svcctl_CloseServiceHandle_object_handle = -1; +static gint hf_svcctl_svcctl_ControlService_control = -1; +static gint hf_svcctl_svcctl_ControlService_service_handle = -1; +static gint hf_svcctl_svcctl_ControlService_service_status = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_HARDWAREPROFILECHANGE = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_NETBINDCHANGE = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PARAMCHANGE = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PAUSE_CONTINUE = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_POWEREVENT = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PRESHUTDOWN = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_SESSIONCHANGE = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_SHUTDOWN = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_STOP = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_TIMECHANGE = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_TRIGGEREVENT = -1; +static gint hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_USERMODEREBOOT = -1; +static gint hf_svcctl_svcctl_CreateServiceA_DisplayName = -1; +static gint hf_svcctl_svcctl_CreateServiceA_LoadOrderGroupKey = -1; +static gint hf_svcctl_svcctl_CreateServiceA_ServiceName = -1; +static gint hf_svcctl_svcctl_CreateServiceA_binary_path = -1; +static gint hf_svcctl_svcctl_CreateServiceA_dependencies = -1; +static gint hf_svcctl_svcctl_CreateServiceA_dependencies_size = -1; +static gint hf_svcctl_svcctl_CreateServiceA_desired_access = -1; +static gint hf_svcctl_svcctl_CreateServiceA_error_control = -1; +static gint hf_svcctl_svcctl_CreateServiceA_password = -1; +static gint hf_svcctl_svcctl_CreateServiceA_password_size = -1; +static gint hf_svcctl_svcctl_CreateServiceA_scm_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceA_service_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceA_service_start_name = -1; +static gint hf_svcctl_svcctl_CreateServiceA_service_type = -1; +static gint hf_svcctl_svcctl_CreateServiceA_start_type = -1; +static gint hf_svcctl_svcctl_CreateServiceA_tag_id = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_DisplayName = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_LoadOrderGroupKey = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_ServiceName = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_binary_path = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_dependencies = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_dependencies_size = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_desired_access = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_error_control = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_password = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_password_size = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_scm_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_service_start_name = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_service_type = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_start_type = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64A_tag_id = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_DisplayName = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_LoadOrderGroupKey = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_ServiceName = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_binary_path = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_dependencies = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_dependencies_size = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_desired_access = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_error_control = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_password = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_password_size = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_scm_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_service_start_name = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_service_type = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_start_type = -1; +static gint hf_svcctl_svcctl_CreateServiceWOW64W_tag_id = -1; +static gint hf_svcctl_svcctl_CreateServiceW_DisplayName = -1; +static gint hf_svcctl_svcctl_CreateServiceW_LoadOrderGroup = -1; +static gint hf_svcctl_svcctl_CreateServiceW_ServiceName = -1; +static gint hf_svcctl_svcctl_CreateServiceW_binary_path = -1; +static gint hf_svcctl_svcctl_CreateServiceW_dependencies = -1; +static gint hf_svcctl_svcctl_CreateServiceW_dependencies_size = -1; +static gint hf_svcctl_svcctl_CreateServiceW_desired_access = -1; +static gint hf_svcctl_svcctl_CreateServiceW_error_control = -1; +static gint hf_svcctl_svcctl_CreateServiceW_password = -1; +static gint hf_svcctl_svcctl_CreateServiceW_password_size = -1; +static gint hf_svcctl_svcctl_CreateServiceW_scm_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceW_service_handle = -1; +static gint hf_svcctl_svcctl_CreateServiceW_service_start_name = -1; +static gint hf_svcctl_svcctl_CreateServiceW_service_type = -1; +static gint hf_svcctl_svcctl_CreateServiceW_start_type = -1; +static gint hf_svcctl_svcctl_CreateServiceW_tag_id = -1; +static gint hf_svcctl_svcctl_CreateWowService_DisplayName = -1; +static gint hf_svcctl_svcctl_CreateWowService_LoadOrderGroupKey = -1; +static gint hf_svcctl_svcctl_CreateWowService_ServiceName = -1; +static gint hf_svcctl_svcctl_CreateWowService_binary_path = -1; +static gint hf_svcctl_svcctl_CreateWowService_dependencies = -1; +static gint hf_svcctl_svcctl_CreateWowService_dependencies_size = -1; +static gint hf_svcctl_svcctl_CreateWowService_desired_access = -1; +static gint hf_svcctl_svcctl_CreateWowService_error_control = -1; +static gint hf_svcctl_svcctl_CreateWowService_handle = -1; +static gint hf_svcctl_svcctl_CreateWowService_password = -1; +static gint hf_svcctl_svcctl_CreateWowService_password_size = -1; +static gint hf_svcctl_svcctl_CreateWowService_scm_handle = -1; +static gint hf_svcctl_svcctl_CreateWowService_service_start_name = -1; +static gint hf_svcctl_svcctl_CreateWowService_service_type = -1; +static gint hf_svcctl_svcctl_CreateWowService_service_wow_type = -1; +static gint hf_svcctl_svcctl_CreateWowService_start_type = -1; +static gint hf_svcctl_svcctl_CreateWowService_tag_id = -1; +static gint hf_svcctl_svcctl_DeleteService_service_handle = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesA_needed = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesA_offered = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesA_service_handle = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesA_service_status = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesA_services_returned = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesA_state = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesW_bytesneeded = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesW_offered = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesW_service_handle = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesW_service_state = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesW_service_status = -1; +static gint hf_svcctl_svcctl_EnumDependentServicesW_services_returned = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_ResumeIndex = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_cbBufSize = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_lpBuffer = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_lpServicesReturned = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_pcbBytesNeeded = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_pszGroupName = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_scm_handle = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_service_state = -1; +static gint hf_svcctl_svcctl_EnumServiceGroupW_service_type = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_needed = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_offered = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_resume_handle = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_scm_handle = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_service = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_service_state = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_service_type = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusA_services_returned = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_bytes_needed = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_offered = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_resume_index = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_scm_handle = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_service_state = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_service_type = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_services = -1; +static gint hf_svcctl_svcctl_EnumServicesStatusW_services_returned = -1; +static gint hf_svcctl_svcctl_GetCurrentGroupeStateW_handle = -1; +static gint hf_svcctl_svcctl_GetCurrentGroupeStateW_lpLoadOrderGroup = -1; +static gint hf_svcctl_svcctl_GetCurrentGroupeStateW_state = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameA_display_name = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameA_display_name_length = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameA_handle = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameA_service_name = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameW_display_name = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameW_display_name_length = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameW_scm_handle = -1; +static gint hf_svcctl_svcctl_GetServiceDisplayNameW_service_name = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameA_display_name_length = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameA_key_name = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameA_scm_handle = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameA_service_name = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameW_display_name = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameW_scm_handle = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameW_service_name = -1; +static gint hf_svcctl_svcctl_GetServiceKeyNameW_service_name_length = -1; +static gint hf_svcctl_svcctl_LockServiceDatabase_lock_handle = -1; +static gint hf_svcctl_svcctl_LockServiceDatabase_scm_handle = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_ALL_ACCESS = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_CONNECT = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_CREATE_SERVICE = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_ENUMERATE_SERVICE = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_LOCK = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_MODIFY_BOOT_CONFIG = -1; +static gint hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_QUERY_LOCK_STATUS = -1; +static gint hf_svcctl_svcctl_NotifyBootConfigStatus_boot_acceptable = -1; +static gint hf_svcctl_svcctl_NotifyBootConfigStatus_machine_name = -1; +static gint hf_svcctl_svcctl_OpenSCManager2_database_name = -1; +static gint hf_svcctl_svcctl_OpenSCManager2_desired_access = -1; +static gint hf_svcctl_svcctl_OpenSCManager2_handle = -1; +static gint hf_svcctl_svcctl_OpenSCManagerA_DatabaseName = -1; +static gint hf_svcctl_svcctl_OpenSCManagerA_MachineName = -1; +static gint hf_svcctl_svcctl_OpenSCManagerA_access_mask = -1; +static gint hf_svcctl_svcctl_OpenSCManagerA_scm_handle = -1; +static gint hf_svcctl_svcctl_OpenSCManagerW_DatabaseName = -1; +static gint hf_svcctl_svcctl_OpenSCManagerW_MachineName = -1; +static gint hf_svcctl_svcctl_OpenSCManagerW_access_mask = -1; +static gint hf_svcctl_svcctl_OpenSCManagerW_scm_handle = -1; +static gint hf_svcctl_svcctl_OpenServiceA_ServiceName = -1; +static gint hf_svcctl_svcctl_OpenServiceA_access_mask = -1; +static gint hf_svcctl_svcctl_OpenServiceA_scm_handle = -1; +static gint hf_svcctl_svcctl_OpenServiceA_service_handle = -1; +static gint hf_svcctl_svcctl_OpenServiceW_ServiceName = -1; +static gint hf_svcctl_svcctl_OpenServiceW_access_mask = -1; +static gint hf_svcctl_svcctl_OpenServiceW_scm_handle = -1; +static gint hf_svcctl_svcctl_OpenServiceW_service_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2A_buffer = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2A_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2A_info_level = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2A_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2A_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2W_buffer = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2W_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2W_info_level = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2W_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceConfig2W_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigA_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigA_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigA_query = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigA_service_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigEx_info_level = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigEx_service_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigW_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigW_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigW_service_config = -1; +static gint hf_svcctl_svcctl_QueryServiceConfigW_service_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusA_lock_status = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusA_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusA_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusA_scm_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusW_lock_status = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusW_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusW_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceLockStatusW_scm_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceObjectSecurity_bytes_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceObjectSecurity_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceObjectSecurity_security_descriptor = -1; +static gint hf_svcctl_svcctl_QueryServiceObjectSecurity_security_flags = -1; +static gint hf_svcctl_svcctl_QueryServiceObjectSecurity_service_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceStatusEx_buffer = -1; +static gint hf_svcctl_svcctl_QueryServiceStatusEx_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceStatusEx_info_level = -1; +static gint hf_svcctl_svcctl_QueryServiceStatusEx_needed = -1; +static gint hf_svcctl_svcctl_QueryServiceStatusEx_offered = -1; +static gint hf_svcctl_svcctl_QueryServiceStatus_service_handle = -1; +static gint hf_svcctl_svcctl_QueryServiceStatus_service_status = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsA_handle = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsA_lpString = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsA_service_bits = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsA_set_bits_on = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsA_update_immediately = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsW_lpString = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsW_service_bits = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsW_service_handle = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsW_set_bits_on = -1; +static gint hf_svcctl_svcctl_SCSetServiceBitsW_update_immediately = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_CHANGE_CONFIG = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_ENUMERATE_DEPENDENTS = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_INTERROGATE = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_PAUSE_CONTINUE = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_CONFIG = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_STATUS = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_START = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_STOP = -1; +static gint hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_USER_DEFINED_CONTROL = -1; +static gint hf_svcctl_svcctl_SetServiceObjectSecurity_offered = -1; +static gint hf_svcctl_svcctl_SetServiceObjectSecurity_security_descriptor = -1; +static gint hf_svcctl_svcctl_SetServiceObjectSecurity_security_flags = -1; +static gint hf_svcctl_svcctl_SetServiceObjectSecurity_service_handle = -1; +static gint hf_svcctl_svcctl_SetServiceStatus_service_handle = -1; +static gint hf_svcctl_svcctl_SetServiceStatus_service_status = -1; +static gint hf_svcctl_svcctl_StartServiceA_Arguments = -1; +static gint hf_svcctl_svcctl_StartServiceA_NumArgs = -1; +static gint hf_svcctl_svcctl_StartServiceA_service_handle = -1; +static gint hf_svcctl_svcctl_StartServiceW_Arguments = -1; +static gint hf_svcctl_svcctl_StartServiceW_NumArgs = -1; +static gint hf_svcctl_svcctl_StartServiceW_service_handle = -1; +static gint hf_svcctl_svcctl_UnlockServiceDatabase_lock_handle = -1; +static gint hf_svcctl_werror = -1; + +static gint proto_dcerpc_svcctl = -1; +/* Version information */ + + +static e_guid_t uuid_dcerpc_svcctl = { + 0x367abb81, 0x9844, 0x35f1, + { 0xad, 0x32, 0x98, 0xf0, 0x38, 0x00, 0x10, 0x03 } +}; +static guint16 ver_dcerpc_svcctl = 2; + +static int svcctl_dissect_element_SERVICE_LOCK_STATUS_is_locked(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_owner(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_owner_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_duration(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +const value_string svcctl_svcctl_ServiceStatus_vals[] = { + { SVCCTL_STOPPED, "SVCCTL_STOPPED" }, + { SVCCTL_START_PENDING, "SVCCTL_START_PENDING" }, + { SVCCTL_STOP_PENDING, "SVCCTL_STOP_PENDING" }, + { SVCCTL_RUNNING, "SVCCTL_RUNNING" }, + { SVCCTL_CONTINUE_PENDING, "SVCCTL_CONTINUE_PENDING" }, + { SVCCTL_PAUSE_PENDING, "SVCCTL_PAUSE_PENDING" }, + { SVCCTL_PAUSED, "SVCCTL_PAUSED" }, +{ 0, NULL } +}; +const value_string svcctl_svcctl_ServiceType_vals[] = { + { SERVICE_TYPE_KERNEL_DRIVER, "SERVICE_TYPE_KERNEL_DRIVER" }, + { SERVICE_TYPE_FS_DRIVER, "SERVICE_TYPE_FS_DRIVER" }, + { SERVICE_TYPE_ADAPTER, "SERVICE_TYPE_ADAPTER" }, + { SERVICE_TYPE_RECOGNIZER_DRIVER, "SERVICE_TYPE_RECOGNIZER_DRIVER" }, + { SERVICE_TYPE_DRIVER, "SERVICE_TYPE_DRIVER" }, + { SERVICE_TYPE_WIN32_OWN_PROCESS, "SERVICE_TYPE_WIN32_OWN_PROCESS" }, + { SERVICE_TYPE_WIN32_SHARE_PROCESS, "SERVICE_TYPE_WIN32_SHARE_PROCESS" }, + { SERVICE_TYPE_USER_OWN_PROCESS, "SERVICE_TYPE_USER_OWN_PROCESS" }, + { SERVICE_TYPE_USER_SHARE_PROCESS, "SERVICE_TYPE_USER_SHARE_PROCESS" }, + { SERVICE_TYPE_WIN32, "SERVICE_TYPE_WIN32" }, + { SERVICE_TYPE_INTERACTIVE_PROCESS, "SERVICE_TYPE_INTERACTIVE_PROCESS" }, +{ 0, NULL } +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_STOP_tfs = { + "SERVICE_ACCEPT_STOP is SET", + "SERVICE_ACCEPT_STOP is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_PAUSE_CONTINUE_tfs = { + "SERVICE_ACCEPT_PAUSE_CONTINUE is SET", + "SERVICE_ACCEPT_PAUSE_CONTINUE is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_SHUTDOWN_tfs = { + "SERVICE_ACCEPT_SHUTDOWN is SET", + "SERVICE_ACCEPT_SHUTDOWN is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_PARAMCHANGE_tfs = { + "SERVICE_ACCEPT_PARAMCHANGE is SET", + "SERVICE_ACCEPT_PARAMCHANGE is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_NETBINDCHANGE_tfs = { + "SERVICE_ACCEPT_NETBINDCHANGE is SET", + "SERVICE_ACCEPT_NETBINDCHANGE is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_HARDWAREPROFILECHANGE_tfs = { + "SERVICE_ACCEPT_HARDWAREPROFILECHANGE is SET", + "SERVICE_ACCEPT_HARDWAREPROFILECHANGE is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_POWEREVENT_tfs = { + "SERVICE_ACCEPT_POWEREVENT is SET", + "SERVICE_ACCEPT_POWEREVENT is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_SESSIONCHANGE_tfs = { + "SERVICE_ACCEPT_SESSIONCHANGE is SET", + "SERVICE_ACCEPT_SESSIONCHANGE is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_PRESHUTDOWN_tfs = { + "SERVICE_ACCEPT_PRESHUTDOWN is SET", + "SERVICE_ACCEPT_PRESHUTDOWN is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_TIMECHANGE_tfs = { + "SERVICE_ACCEPT_TIMECHANGE is SET", + "SERVICE_ACCEPT_TIMECHANGE is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_TRIGGEREVENT_tfs = { + "SERVICE_ACCEPT_TRIGGEREVENT is SET", + "SERVICE_ACCEPT_TRIGGEREVENT is NOT SET", +}; +static const true_false_string svcctl_ControlsAccepted_SERVICE_ACCEPT_USERMODEREBOOT_tfs = { + "SERVICE_ACCEPT_USERMODEREBOOT is SET", + "SERVICE_ACCEPT_USERMODEREBOOT is NOT SET", +}; +static int svcctl_dissect_element_SERVICE_STATUS_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_controls_accepted(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_win32_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_service_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_check_point(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_wait_hint(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +const value_string svcctl_svcctl_ServiceFlags_vals[] = { + { SERVICE_RUNS_IN_NONSYSTEM_ORNOTRUNNING, "SERVICE_RUNS_IN_NONSYSTEM_ORNOTRUNNING" }, + { SERVICE_RUNS_IN_SYSTEM_PROCESS, "SERVICE_RUNS_IN_SYSTEM_PROCESS" }, +{ 0, NULL } +}; +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_controls_accepted(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_win32_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_service_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_check_point(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_wait_hint(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_process_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SERVICE_STATUS_PROCESS_service_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSW_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSW_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSW_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSA_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSA_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSA_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSA_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ENUM_SERVICE_STATUSA_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +const value_string svcctl_SERVICE_CONTROL_vals[] = { + { SVCCTL_CONTROL_STOP, "SVCCTL_CONTROL_STOP" }, + { SVCCTL_CONTROL_PAUSE, "SVCCTL_CONTROL_PAUSE" }, + { SVCCTL_CONTROL_CONTINUE, "SVCCTL_CONTROL_CONTINUE" }, + { SVCCTL_CONTROL_INTERROGATE, "SVCCTL_CONTROL_INTERROGATE" }, + { SVCCTL_CONTROL_SHUTDOWN, "SVCCTL_CONTROL_SHUTDOWN" }, + { SERVICE_CONTROL_PARAMCHANGE, "SERVICE_CONTROL_PARAMCHANGE" }, + { SERVICE_CONTROL_NETBINDADD, "SERVICE_CONTROL_NETBINDADD" }, + { SERVICE_CONTROL_NETBINDREMOVE, "SERVICE_CONTROL_NETBINDREMOVE" }, + { SERVICE_CONTROL_NETBINDENABLE, "SERVICE_CONTROL_NETBINDENABLE" }, + { SERVICE_CONTROL_NETBINDDISABLE, "SERVICE_CONTROL_NETBINDDISABLE" }, +{ 0, NULL } +}; +const value_string svcctl_svcctl_ErrorControl_vals[] = { + { SVCCTL_SVC_ERROR_IGNORE, "SVCCTL_SVC_ERROR_IGNORE" }, + { SVCCTL_SVC_ERROR_NORMAL, "SVCCTL_SVC_ERROR_NORMAL" }, + { SVCCTL_SVC_ERROR_CRITICAL, "SVCCTL_SVC_ERROR_CRITICAL" }, + { SVCCTL_SVC_ERROR_SEVERE, "SVCCTL_SVC_ERROR_SEVERE" }, +{ 0, NULL } +}; +const value_string svcctl_svcctl_StartType_vals[] = { + { SVCCTL_BOOT_START, "SVCCTL_BOOT_START" }, + { SVCCTL_SYSTEM_START, "SVCCTL_SYSTEM_START" }, + { SVCCTL_AUTO_START, "SVCCTL_AUTO_START" }, + { SVCCTL_DEMAND_START, "SVCCTL_DEMAND_START" }, + { SVCCTL_DISABLED, "SVCCTL_DISABLED" }, +{ 0, NULL } +}; +const value_string svcctl_svcctl_ServiceState_vals[] = { + { SERVICE_STATE_ACTIVE, "SERVICE_STATE_ACTIVE" }, + { SERVICE_STATE_INACTIVE, "SERVICE_STATE_INACTIVE" }, + { SERVICE_STATE_ALL, "SERVICE_STATE_ALL" }, +{ 0, NULL } +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_CONNECT_tfs = { + "SC_RIGHT_MGR_CONNECT is SET", + "SC_RIGHT_MGR_CONNECT is NOT SET", +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_CREATE_SERVICE_tfs = { + "SC_RIGHT_MGR_CREATE_SERVICE is SET", + "SC_RIGHT_MGR_CREATE_SERVICE is NOT SET", +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_ENUMERATE_SERVICE_tfs = { + "SC_RIGHT_MGR_ENUMERATE_SERVICE is SET", + "SC_RIGHT_MGR_ENUMERATE_SERVICE is NOT SET", +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_LOCK_tfs = { + "SC_RIGHT_MGR_LOCK is SET", + "SC_RIGHT_MGR_LOCK is NOT SET", +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_QUERY_LOCK_STATUS_tfs = { + "SC_RIGHT_MGR_QUERY_LOCK_STATUS is SET", + "SC_RIGHT_MGR_QUERY_LOCK_STATUS is NOT SET", +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_MODIFY_BOOT_CONFIG_tfs = { + "SC_RIGHT_MGR_MODIFY_BOOT_CONFIG is SET", + "SC_RIGHT_MGR_MODIFY_BOOT_CONFIG is NOT SET", +}; +static const true_false_string svcctl_MgrAccessMask_SC_RIGHT_MGR_ALL_ACCESS_tfs = { + "SC_RIGHT_MGR_ALL_ACCESS is SET", + "SC_RIGHT_MGR_ALL_ACCESS is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_CONFIG_tfs = { + "SC_RIGHT_SVC_QUERY_CONFIG is SET", + "SC_RIGHT_SVC_QUERY_CONFIG is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_CHANGE_CONFIG_tfs = { + "SC_RIGHT_SVC_CHANGE_CONFIG is SET", + "SC_RIGHT_SVC_CHANGE_CONFIG is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_STATUS_tfs = { + "SC_RIGHT_SVC_QUERY_STATUS is SET", + "SC_RIGHT_SVC_QUERY_STATUS is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_ENUMERATE_DEPENDENTS_tfs = { + "SC_RIGHT_SVC_ENUMERATE_DEPENDENTS is SET", + "SC_RIGHT_SVC_ENUMERATE_DEPENDENTS is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_START_tfs = { + "SC_RIGHT_SVC_START is SET", + "SC_RIGHT_SVC_START is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_STOP_tfs = { + "SC_RIGHT_SVC_STOP is SET", + "SC_RIGHT_SVC_STOP is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_PAUSE_CONTINUE_tfs = { + "SC_RIGHT_SVC_PAUSE_CONTINUE is SET", + "SC_RIGHT_SVC_PAUSE_CONTINUE is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_INTERROGATE_tfs = { + "SC_RIGHT_SVC_INTERROGATE is SET", + "SC_RIGHT_SVC_INTERROGATE is NOT SET", +}; +static const true_false_string svcctl_ServiceAccessMask_SC_RIGHT_SVC_USER_DEFINED_CONTROL_tfs = { + "SC_RIGHT_SVC_USER_DEFINED_CONTROL is SET", + "SC_RIGHT_SVC_USER_DEFINED_CONTROL is NOT SET", +}; +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_executablepath(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_executablepath_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_loadordergroup(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_loadordergroup_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_startname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_startname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_displayname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QUERY_SERVICE_CONFIG_displayname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ArgumentString_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ArgumentString_string_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ArgumentStringA_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ArgumentStringA_string_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +const value_string svcctl_svcctl_ConfigLevel_vals[] = { + { SERVICE_CONFIG_DESCRIPTION, "SERVICE_CONFIG_DESCRIPTION" }, + { SERVICE_CONFIG_FAILURE_ACTIONS, "SERVICE_CONFIG_FAILURE_ACTIONS" }, +{ 0, NULL } +}; +const value_string svcctl_svcctl_StatusLevel_vals[] = { + { SVC_STATUS_PROCESS_INFO, "SVC_STATUS_PROCESS_INFO" }, +{ 0, NULL } +}; +static int svcctl_dissect_element_CloseServiceHandle_object_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CloseServiceHandle_object_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ControlService_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ControlService_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ControlService_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ControlService_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ControlService_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_DeleteService_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_DeleteService_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_LockServiceDatabase_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_LockServiceDatabase_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_LockServiceDatabase_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_LockServiceDatabase_lock_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_security_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_bytes_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceObjectSecurity_bytes_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_security_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceObjectSecurity_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatus_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatus_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatus_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatus_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceStatus_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceStatus_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceStatus_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SetServiceStatus_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_UnlockServiceDatabase_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_UnlockServiceDatabase_lock_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_NotifyBootConfigStatus_machine_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_NotifyBootConfigStatus_machine_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_NotifyBootConfigStatus_boot_acceptable(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_service_bits(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_set_bits_on(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_update_immediately(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_lpString(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsW_lpString_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_binary_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_load_order_group(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_load_order_group_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_dwDependSize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_dwPwSize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_LoadOrderGroup(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_LoadOrderGroup_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_service_status__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_bytesneeded(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_bytesneeded_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_services_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesW_services_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_resume_index(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusW_resume_index_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_MachineName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_MachineName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_DatabaseName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_DatabaseName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceW_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceW_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_service_config(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_service_config_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigW_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_lock_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_lock_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusW_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceW_NumArgs(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceW_Arguments(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceW_Arguments_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceW_Arguments__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_display_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_display_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameW_display_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_service_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_service_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameW_service_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_service_bits(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_set_bits_on(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_update_immediately(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_lpString(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_SCSetServiceBitsA_lpString_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_binary_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_load_order_group(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_load_order_group_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfigA_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_services_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumDependentServicesA_services_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_service(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_service_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_services_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_services_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_resume_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusA_resume_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_MachineName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_MachineName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_DatabaseName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_DatabaseName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManagerA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceA_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceA_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenServiceA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_query(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_query_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_lock_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_lock_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceLockStatusA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceA_NumArgs(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceA_Arguments(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceA_Arguments_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_StartServiceA_Arguments__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_display_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_display_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceDisplayNameA_display_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_key_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_key_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_key_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_display_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetServiceKeyNameA_display_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetCurrentGroupeStateW_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetCurrentGroupeStateW_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetCurrentGroupeStateW_lpLoadOrderGroup(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetCurrentGroupeStateW_lpLoadOrderGroup_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetCurrentGroupeStateW_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_GetCurrentGroupeStateW_state_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_lpBuffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_lpBuffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_cbBufSize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_pcbBytesNeeded(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_pcbBytesNeeded_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_lpServicesReturned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_lpServicesReturned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_ResumeIndex(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_ResumeIndex_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_pszGroupName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServiceGroupW_pszGroupName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2A_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2A_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2A_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2A_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2A_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2W_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2W_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2W_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2W_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_ChangeServiceConfig2W_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2A_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_buffer__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfig2W_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_buffer__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceStatusEx_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_services(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_services_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_service_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_service_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_resume_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_resume_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_group_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_group_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExA_group_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_scmanager(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_scmanager_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_services(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_services_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_services__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_service_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_service_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_resume_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_resume_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_group_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_EnumServicesStatusExW_group_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64A_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateServiceWOW64W_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigEx_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigEx_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_QueryServiceConfigEx_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_service_wow_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_CreateWowService_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManager2_database_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManager2_database_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManager2_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManager2_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +static int svcctl_dissect_element_OpenSCManager2_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_); +/* ENUM_SERVICE_STATUSW Caveats + https://github.com/fortra/impacket/blob/4888172ce638910104da4bda2c3301c24e17564c/impacket/dcerpc/v5/scmr.py#L1274 +*/ +static int +svcctl_dissect_struct_ENUM_SERVICE_STATUSW_ptr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index, gint starting_offset); +static int +svcctl_dissect_struct_ENUM_SERVICE_STATUSW_ptr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index, gint starting_offset) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + proto_tree *tr = NULL; + int old_offset; + guint32 _referent_id = 0; + ALIGN_TO_5_BYTES; + old_offset = offset; + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_ENUM_SERVICE_STATUSW); + } + // Service Name + tr = proto_tree_add_subtree(tree, tvb, offset, 4, ett_svcctl_service_name, NULL, "Pointer to Service Name"); + offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tr, di, drep, hf_svcctl_service_referent_id, 0, &_referent_id); + dissect_null_term_wstring(tvb, starting_offset + _referent_id, pinfo, tr, drep, hf_svcctl_ENUM_SERVICE_STATUSW_service_name , 0); + // Display Name + tr = proto_tree_add_subtree(tree, tvb, offset, 4, ett_svcctl_display_name, NULL, "Pointer to Display Name"); + offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tr, di, drep, hf_svcctl_service_referent_id, 0, &_referent_id); + dissect_null_term_wstring(tvb, starting_offset + _referent_id, pinfo, tr, drep, hf_svcctl_ENUM_SERVICE_STATUSW_display_name , 0); + // Status + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSW_status(tvb, offset, pinfo, tree, di, drep); + proto_item_set_len(item, offset-old_offset); + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + return offset; +} +/* REnumServicesStatusW + https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/22b4ff3d-29c6-481f-b598-8ce66a46944a +*/ +static int +svcctl_dissect_EnumServicesStatusW_response(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint32 status; + guint32 services_returned= 0; + proto_item *item; + proto_tree *tr = NULL; + gint services_buffer_offset; + gint payload_starting_offset = offset; + guint64 buffer_size = 0; + ALIGN_TO_5_BYTES + di->dcerpc_procedure_name="EnumServicesStatusW"; + tr = proto_tree_add_subtree(tree, tvb, offset, 0, ett_svcctl_service, &item, "Pointer to Services Status"); + // Services Buffer Size + offset = dissect_ndr_uint3264(tvb, offset, pinfo, tr, di, drep, hf_svcctl_service_buffer_size, &buffer_size); + services_buffer_offset = offset; + offset += (int)buffer_size; + proto_item_set_len(item, offset-payload_starting_offset); + ALIGN_TO_4_BYTES + // Bytes Needed + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_bytes_needed, 0); + // Services Returned + offset = PIDL_dissect_uint32_val( tvb, offset, pinfo, tree, di, drep + , hf_svcctl_svcctl_EnumServicesStatusW_services_returned + , 0, &services_returned); + // Services + if (services_returned > 0){ + payload_starting_offset = services_buffer_offset; + for(unsigned idx = 0; idx < services_returned ; ++idx){ + services_buffer_offset = svcctl_dissect_struct_ENUM_SERVICE_STATUSW_ptr( tvb, services_buffer_offset + , pinfo, tr, di, drep + , hf_svcctl_svcctl_EnumDependentServicesW_service_status + , payload_starting_offset); + } + dissect_deferred_pointers(pinfo, tvb, services_buffer_offset, di, drep); + } + // Resume Index + offset = svcctl_dissect_element_EnumServicesStatusW_resume_index(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + // Return status + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + return offset; +} + + +/* IDL: bitmap { */ +/* IDL: } */ + +int +svcctl_dissect_bitmap_security_secinfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + guint32 flags; + ALIGN_TO_4_BYTES; + + proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep)); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags); + + return offset; +} + + +/* IDL: struct { */ +/* IDL: uint32 is_locked; */ +/* IDL: [charset(UTF16)] [unique(1)] uint16 *lock_owner; */ +/* IDL: uint32 lock_duration; */ +/* IDL: } */ + +static int +svcctl_dissect_element_SERVICE_LOCK_STATUS_is_locked(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_LOCK_STATUS_is_locked, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_owner(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_owner_, NDR_POINTER_UNIQUE, "Pointer to Lock Owner (uint16)",hf_svcctl_SERVICE_LOCK_STATUS_lock_owner); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_owner_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_SERVICE_LOCK_STATUS_lock_owner, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_duration(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_LOCK_STATUS_lock_duration, 0); + + return offset; +} + +int +svcctl_dissect_struct_SERVICE_LOCK_STATUS(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_SERVICE_LOCK_STATUS); + } + + offset = svcctl_dissect_element_SERVICE_LOCK_STATUS_is_locked(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_owner(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_LOCK_STATUS_lock_duration(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + + +/* IDL: enum { */ +/* IDL: SVCCTL_STOPPED=0x00000001, */ +/* IDL: SVCCTL_START_PENDING=0x00000002, */ +/* IDL: SVCCTL_STOP_PENDING=0x00000003, */ +/* IDL: SVCCTL_RUNNING=0x00000004, */ +/* IDL: SVCCTL_CONTINUE_PENDING=0x00000005, */ +/* IDL: SVCCTL_PAUSE_PENDING=0x00000006, */ +/* IDL: SVCCTL_PAUSED=0x00000007, */ +/* IDL: } */ + +int +svcctl_dissect_enum_ServiceStatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: enum { */ +/* IDL: SERVICE_TYPE_KERNEL_DRIVER=0x00000001, */ +/* IDL: SERVICE_TYPE_FS_DRIVER=0x00000002, */ +/* IDL: SERVICE_TYPE_ADAPTER=0x00000004, */ +/* IDL: SERVICE_TYPE_RECOGNIZER_DRIVER=0x00000008, */ +/* IDL: SERVICE_TYPE_DRIVER=SERVICE_TYPE_KERNEL_DRIVER|SERVICE_TYPE_FS_DRIVER|SERVICE_TYPE_RECOGNIZER_DRIVER, */ +/* IDL: SERVICE_TYPE_WIN32_OWN_PROCESS=0x00000010, */ +/* IDL: SERVICE_TYPE_WIN32_SHARE_PROCESS=0x00000020, */ +/* IDL: SERVICE_TYPE_USER_OWN_PROCESS=0x00000050, */ +/* IDL: SERVICE_TYPE_USER_SHARE_PROCESS=0x00000060, */ +/* IDL: SERVICE_TYPE_WIN32=SERVICE_TYPE_WIN32_OWN_PROCESS|SERVICE_TYPE_WIN32_SHARE_PROCESS, */ +/* IDL: SERVICE_TYPE_INTERACTIVE_PROCESS=0x00000100, */ +/* IDL: } */ + +int +svcctl_dissect_enum_ServiceType(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: bitmap { */ +/* IDL: SERVICE_ACCEPT_STOP = 0x00000001 , */ +/* IDL: SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002 , */ +/* IDL: SERVICE_ACCEPT_SHUTDOWN = 0x00000004 , */ +/* IDL: SERVICE_ACCEPT_PARAMCHANGE = 0x00000008 , */ +/* IDL: SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010 , */ +/* IDL: SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020 , */ +/* IDL: SERVICE_ACCEPT_POWEREVENT = 0x00000040 , */ +/* IDL: SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080 , */ +/* IDL: SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100 , */ +/* IDL: SERVICE_ACCEPT_TIMECHANGE = 0x00000200 , */ +/* IDL: SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400 , */ +/* IDL: SERVICE_ACCEPT_USERMODEREBOOT = 0x00000800 , */ +/* IDL: } */ + +int +svcctl_dissect_bitmap_ControlsAccepted(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item; + static int * const svcctl_svcctl_ControlsAccepted_fields[] = { + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_STOP, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PAUSE_CONTINUE, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_SHUTDOWN, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PARAMCHANGE, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_NETBINDCHANGE, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_HARDWAREPROFILECHANGE, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_POWEREVENT, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_SESSIONCHANGE, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PRESHUTDOWN, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_TIMECHANGE, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_TRIGGEREVENT, + &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_USERMODEREBOOT, + NULL + }; + guint32 flags; + ALIGN_TO_4_BYTES; + + item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index, + ett_svcctl_svcctl_ControlsAccepted, svcctl_svcctl_ControlsAccepted_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags); + + if (!flags) + proto_item_append_text(item, ": (No values set)"); + + if (flags & (~0x00000fff)) { + flags &= (~0x00000fff); + proto_item_append_text(item, "Unknown bitmap value 0x%x", flags); + } + + return offset; +} + + +/* IDL: struct { */ +/* IDL: svcctl_ServiceType type; */ +/* IDL: svcctl_ServiceStatus state; */ +/* IDL: svcctl_ControlsAccepted controls_accepted; */ +/* IDL: WERROR win32_exit_code; */ +/* IDL: uint32 service_exit_code; */ +/* IDL: uint32 check_point; */ +/* IDL: uint32 wait_hint; */ +/* IDL: } */ + +static int +svcctl_dissect_element_SERVICE_STATUS_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceStatus(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_controls_accepted(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_ControlsAccepted(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_controls_accepted, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_win32_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_win32_exit_code, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_service_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_service_exit_code, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_check_point(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_check_point, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_wait_hint(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_wait_hint, 0); + + return offset; +} + +int +svcctl_dissect_struct_SERVICE_STATUS(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_4_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_SERVICE_STATUS); + } + + offset = svcctl_dissect_element_SERVICE_STATUS_type(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_state(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_controls_accepted(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_win32_exit_code(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_service_exit_code(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_check_point(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_wait_hint(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_4_BYTES; + } + + return offset; +} + + +/* IDL: enum { */ +/* IDL: SERVICE_RUNS_IN_NONSYSTEM_ORNOTRUNNING=0x00000000, */ +/* IDL: SERVICE_RUNS_IN_SYSTEM_PROCESS=0x00000001, */ +/* IDL: } */ + +int +svcctl_dissect_enum_ServiceFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: struct { */ +/* IDL: svcctl_ServiceType type; */ +/* IDL: svcctl_ServiceStatus state; */ +/* IDL: svcctl_ControlsAccepted controls_accepted; */ +/* IDL: WERROR win32_exit_code; */ +/* IDL: uint32 service_exit_code; */ +/* IDL: uint32 check_point; */ +/* IDL: uint32 wait_hint; */ +/* IDL: uint32 process_id; */ +/* IDL: svcctl_ServiceFlags service_flags; */ +/* IDL: } */ + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceStatus(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_controls_accepted(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_ControlsAccepted(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_controls_accepted, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_win32_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_win32_exit_code, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_service_exit_code(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_service_exit_code, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_check_point(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_check_point, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_wait_hint(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_wait_hint, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_process_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_process_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_SERVICE_STATUS_PROCESS_service_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceFlags(tvb, offset, pinfo, tree, di, drep, hf_svcctl_SERVICE_STATUS_PROCESS_service_flags, 0); + + return offset; +} + +int +svcctl_dissect_struct_SERVICE_STATUS_PROCESS(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_4_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_SERVICE_STATUS_PROCESS); + } + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_type(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_state(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_controls_accepted(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_win32_exit_code(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_service_exit_code(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_check_point(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_wait_hint(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_process_id(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_SERVICE_STATUS_PROCESS_service_flags(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_4_BYTES; + } + + return offset; +} + + +/* IDL: struct { */ +/* IDL: [flag(LIBNDR_FLAG_STR_NULLTERM)] [unique(1)] string *service_name; */ +/* IDL: [flag(LIBNDR_FLAG_STR_NULLTERM)] [unique(1)] string *display_name; */ +/* IDL: SERVICE_STATUS status; */ +/* IDL: } */ + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSW_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ENUM_SERVICE_STATUSW_service_name_, NDR_POINTER_UNIQUE, "Pointer to Service Name (string)",hf_svcctl_ENUM_SERVICE_STATUSW_service_name); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSW_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_svcctl_ENUM_SERVICE_STATUSW_service_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ENUM_SERVICE_STATUSW_display_name_, NDR_POINTER_UNIQUE, "Pointer to Display Name (string)",hf_svcctl_ENUM_SERVICE_STATUSW_display_name); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_svcctl_ENUM_SERVICE_STATUSW_display_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSW_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_ENUM_SERVICE_STATUSW_status,0); + + return offset; +} + +int +svcctl_dissect_struct_ENUM_SERVICE_STATUSW(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_ENUM_SERVICE_STATUSW); + } + + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSW_service_name(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSW_display_name(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSW_status(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + + +/* IDL: struct { */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [unique(1)] string *service_name; */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [unique(1)] string *display_name; */ +/* IDL: SERVICE_STATUS status; */ +/* IDL: } */ + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSA_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ENUM_SERVICE_STATUSA_service_name_, NDR_POINTER_UNIQUE, "Pointer to Service Name (string)",hf_svcctl_ENUM_SERVICE_STATUSA_service_name); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSA_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_ENUM_SERVICE_STATUSA_service_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSA_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ENUM_SERVICE_STATUSA_display_name_, NDR_POINTER_UNIQUE, "Pointer to Display Name (string)",hf_svcctl_ENUM_SERVICE_STATUSA_display_name); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSA_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_ENUM_SERVICE_STATUSA_display_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_ENUM_SERVICE_STATUSA_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_ENUM_SERVICE_STATUSA_status,0); + + return offset; +} + +int +svcctl_dissect_struct_ENUM_SERVICE_STATUSA(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_ENUM_SERVICE_STATUSA); + } + + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSA_service_name(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSA_display_name(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSA_status(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + + +/* IDL: enum { */ +/* IDL: SVCCTL_CONTROL_STOP=0x00000001, */ +/* IDL: SVCCTL_CONTROL_PAUSE=0x00000002, */ +/* IDL: SVCCTL_CONTROL_CONTINUE=0x00000003, */ +/* IDL: SVCCTL_CONTROL_INTERROGATE=0x00000004, */ +/* IDL: SVCCTL_CONTROL_SHUTDOWN=0x00000005, */ +/* IDL: SERVICE_CONTROL_PARAMCHANGE=0x00000006, */ +/* IDL: SERVICE_CONTROL_NETBINDADD=0x00000007, */ +/* IDL: SERVICE_CONTROL_NETBINDREMOVE=0x00000008, */ +/* IDL: SERVICE_CONTROL_NETBINDENABLE=0x00000009, */ +/* IDL: SERVICE_CONTROL_NETBINDDISABLE=0x0000000A, */ +/* IDL: } */ + +int +svcctl_dissect_enum_SERVICE_CONTROL(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: enum { */ +/* IDL: SVCCTL_SVC_ERROR_IGNORE=0x00000000, */ +/* IDL: SVCCTL_SVC_ERROR_NORMAL=0x00000001, */ +/* IDL: SVCCTL_SVC_ERROR_CRITICAL=0x00000002, */ +/* IDL: SVCCTL_SVC_ERROR_SEVERE=0x00000003, */ +/* IDL: } */ + +int +svcctl_dissect_enum_ErrorControl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: enum { */ +/* IDL: SVCCTL_BOOT_START=0x00000000, */ +/* IDL: SVCCTL_SYSTEM_START=0x00000001, */ +/* IDL: SVCCTL_AUTO_START=0x00000002, */ +/* IDL: SVCCTL_DEMAND_START=0x00000003, */ +/* IDL: SVCCTL_DISABLED=0x00000004, */ +/* IDL: } */ + +int +svcctl_dissect_enum_StartType(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: enum { */ +/* IDL: SERVICE_STATE_ACTIVE=0x00000001, */ +/* IDL: SERVICE_STATE_INACTIVE=0x00000002, */ +/* IDL: SERVICE_STATE_ALL=(SERVICE_STATE_ACTIVE|SERVICE_STATE_INACTIVE), */ +/* IDL: } */ + +int +svcctl_dissect_enum_ServiceState(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: bitmap { */ +/* IDL: SC_RIGHT_MGR_CONNECT = 0x00000001 , */ +/* IDL: SC_RIGHT_MGR_CREATE_SERVICE = 0x00000002 , */ +/* IDL: SC_RIGHT_MGR_ENUMERATE_SERVICE = 0x00000004 , */ +/* IDL: SC_RIGHT_MGR_LOCK = 0x00000008 , */ +/* IDL: SC_RIGHT_MGR_QUERY_LOCK_STATUS = 0x00000010 , */ +/* IDL: SC_RIGHT_MGR_MODIFY_BOOT_CONFIG = 0x00000020 , */ +/* IDL: SC_RIGHT_MGR_ALL_ACCESS = 0x000F003F , */ +/* IDL: } */ + +int +svcctl_dissect_bitmap_MgrAccessMask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item; + static int * const svcctl_svcctl_MgrAccessMask_fields[] = { + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_CONNECT, + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_CREATE_SERVICE, + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_ENUMERATE_SERVICE, + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_LOCK, + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_QUERY_LOCK_STATUS, + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_MODIFY_BOOT_CONFIG, + &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_ALL_ACCESS, + NULL + }; + guint32 flags; + ALIGN_TO_4_BYTES; + + item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index, + ett_svcctl_svcctl_MgrAccessMask, svcctl_svcctl_MgrAccessMask_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags); + + if (!flags) + proto_item_append_text(item, ": (No values set)"); + + if (flags & (~0x000f007e)) { + flags &= (~0x000f007e); + proto_item_append_text(item, "Unknown bitmap value 0x%x", flags); + } + + return offset; +} + + +/* IDL: bitmap { */ +/* IDL: SC_RIGHT_SVC_QUERY_CONFIG = 0x00000001 , */ +/* IDL: SC_RIGHT_SVC_CHANGE_CONFIG = 0x00000002 , */ +/* IDL: SC_RIGHT_SVC_QUERY_STATUS = 0x00000004 , */ +/* IDL: SC_RIGHT_SVC_ENUMERATE_DEPENDENTS = 0x00000008 , */ +/* IDL: SC_RIGHT_SVC_START = 0x00000010 , */ +/* IDL: SC_RIGHT_SVC_STOP = 0x00000020 , */ +/* IDL: SC_RIGHT_SVC_PAUSE_CONTINUE = 0x00000040 , */ +/* IDL: SC_RIGHT_SVC_INTERROGATE = 0x00000080 , */ +/* IDL: SC_RIGHT_SVC_USER_DEFINED_CONTROL = 0x00000100 , */ +/* IDL: } */ + +int +svcctl_dissect_bitmap_ServiceAccessMask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item; + static int * const svcctl_svcctl_ServiceAccessMask_fields[] = { + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_CONFIG, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_CHANGE_CONFIG, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_STATUS, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_ENUMERATE_DEPENDENTS, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_START, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_STOP, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_PAUSE_CONTINUE, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_INTERROGATE, + &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_USER_DEFINED_CONTROL, + NULL + }; + guint32 flags; + ALIGN_TO_4_BYTES; + + item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index, + ett_svcctl_svcctl_ServiceAccessMask, svcctl_svcctl_ServiceAccessMask_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags); + + if (!flags) + proto_item_append_text(item, ": (No values set)"); + + if (flags & (~0x000001ff)) { + flags &= (~0x000001ff); + proto_item_append_text(item, "Unknown bitmap value 0x%x", flags); + } + + return offset; +} + + +/* IDL: struct { */ +/* IDL: svcctl_ServiceType service_type; */ +/* IDL: svcctl_StartType start_type; */ +/* IDL: svcctl_ErrorControl error_control; */ +/* IDL: [charset(UTF16)] [range(0,8192)] [unique(1)] uint16 *executablepath; */ +/* IDL: [charset(UTF16)] [range(0,8192)] [unique(1)] uint16 *loadordergroup; */ +/* IDL: uint32 tag_id; */ +/* IDL: [charset(UTF16)] [range(0,8192)] [unique(1)] uint16 *dependencies; */ +/* IDL: [charset(UTF16)] [range(0,8192)] [unique(1)] uint16 *startname; */ +/* IDL: [charset(UTF16)] [range(0,8192)] [unique(1)] uint16 *displayname; */ +/* IDL: } */ + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_QUERY_SERVICE_CONFIG_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_QUERY_SERVICE_CONFIG_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_QUERY_SERVICE_CONFIG_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_executablepath(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QUERY_SERVICE_CONFIG_executablepath_, NDR_POINTER_UNIQUE, "Pointer to Executablepath (uint16)",hf_svcctl_QUERY_SERVICE_CONFIG_executablepath); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_executablepath_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_QUERY_SERVICE_CONFIG_executablepath, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_loadordergroup(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QUERY_SERVICE_CONFIG_loadordergroup_, NDR_POINTER_UNIQUE, "Pointer to Loadordergroup (uint16)",hf_svcctl_QUERY_SERVICE_CONFIG_loadordergroup); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_loadordergroup_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_QUERY_SERVICE_CONFIG_loadordergroup, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_QUERY_SERVICE_CONFIG_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QUERY_SERVICE_CONFIG_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (uint16)",hf_svcctl_QUERY_SERVICE_CONFIG_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_QUERY_SERVICE_CONFIG_dependencies, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_startname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QUERY_SERVICE_CONFIG_startname_, NDR_POINTER_UNIQUE, "Pointer to Startname (uint16)",hf_svcctl_QUERY_SERVICE_CONFIG_startname); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_startname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_QUERY_SERVICE_CONFIG_startname, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_displayname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QUERY_SERVICE_CONFIG_displayname_, NDR_POINTER_UNIQUE, "Pointer to Displayname (uint16)",hf_svcctl_QUERY_SERVICE_CONFIG_displayname); + + return offset; +} + +static int +svcctl_dissect_element_QUERY_SERVICE_CONFIG_displayname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_QUERY_SERVICE_CONFIG_displayname, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +int +svcctl_dissect_struct_QUERY_SERVICE_CONFIG(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_QUERY_SERVICE_CONFIG); + } + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_service_type(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_start_type(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_error_control(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_executablepath(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_loadordergroup(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_tag_id(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_dependencies(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_startname(tvb, offset, pinfo, tree, di, drep); + + offset = svcctl_dissect_element_QUERY_SERVICE_CONFIG_displayname(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + + +/* IDL: struct { */ +/* IDL: [charset(UTF16)] [range(0,SC_MAX_ARGUMENT_LENGTH)] [unique(1)] uint16 *string; */ +/* IDL: } */ + +static int +svcctl_dissect_element_ArgumentString_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ArgumentString_string_, NDR_POINTER_UNIQUE, "Pointer to String (uint16)",hf_svcctl_svcctl_ArgumentString_string); + + return offset; +} + +static int +svcctl_dissect_element_ArgumentString_string_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ArgumentString_string, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +int +svcctl_dissect_struct_ArgumentString(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_svcctl_ArgumentString); + } + + offset = svcctl_dissect_element_ArgumentString_string(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + + +/* IDL: struct { */ +/* IDL: [charset(ASCII)] [range(0,SC_MAX_ARGUMENT_LENGTH)] [unique(1)] uint8 *string; */ +/* IDL: } */ + +static int +svcctl_dissect_element_ArgumentStringA_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ArgumentStringA_string_, NDR_POINTER_UNIQUE, "Pointer to String (uint8)",hf_svcctl_svcctl_ArgumentStringA_string); + + return offset; +} + +static int +svcctl_dissect_element_ArgumentStringA_string_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_ArgumentStringA_string, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +int +svcctl_dissect_struct_ArgumentStringA(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_svcctl_ArgumentStringA); + } + + offset = svcctl_dissect_element_ArgumentStringA_string(tvb, offset, pinfo, tree, di, drep); + + + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + + +/* IDL: enum { */ +/* IDL: SERVICE_CONFIG_DESCRIPTION=0x00000001, */ +/* IDL: SERVICE_CONFIG_FAILURE_ACTIONS=0x00000002, */ +/* IDL: } */ + +int +svcctl_dissect_enum_ConfigLevel(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + + +/* IDL: enum { */ +/* IDL: SVC_STATUS_PROCESS_INFO=0x00000000, */ +/* IDL: } */ + +int +svcctl_dissect_enum_StatusLevel(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + if (param) { + parameter = *param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + if (param) { + *param = parameter; + } + return offset; +} + +static int +svcctl_dissect_element_CloseServiceHandle_object_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CloseServiceHandle_object_handle_, NDR_POINTER_REF, "Pointer to Object Handle (policy_handle)",hf_svcctl_svcctl_CloseServiceHandle_object_handle); + + return offset; +} + +static int +svcctl_dissect_element_CloseServiceHandle_object_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CloseServiceHandle_object_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_CloseServiceHandle( */ +/* IDL: [in] [out] [ref] policy_handle *object_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_CloseServiceHandle_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CloseServiceHandle"; + offset = svcctl_dissect_element_CloseServiceHandle_object_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CloseServiceHandle_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CloseServiceHandle"; + offset = svcctl_dissect_element_CloseServiceHandle_object_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_ControlService_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ControlService_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_ControlService_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_ControlService_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ControlService_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_ControlService_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_SERVICE_CONTROL(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ControlService_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_ControlService_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ControlService_service_status_, NDR_POINTER_REF, "Pointer to Service Status (SERVICE_STATUS)",hf_svcctl_svcctl_ControlService_service_status); + + return offset; +} + +static int +svcctl_dissect_element_ControlService_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_ControlService_service_status,0); + + return offset; +} + +/* IDL: WERROR svcctl_ControlService( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] SERVICE_CONTROL control, */ +/* IDL: [out] [ref] SERVICE_STATUS *service_status */ +/* IDL: ); */ + +static int +svcctl_dissect_ControlService_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ControlService"; + offset = svcctl_dissect_element_ControlService_service_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ControlService_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ControlService"; + offset = svcctl_dissect_element_ControlService_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ControlService_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_DeleteService_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_DeleteService_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_DeleteService_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_DeleteService_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_DeleteService_service_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_DeleteService( */ +/* IDL: [in] [ref] policy_handle *service_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_DeleteService_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="DeleteService"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_DeleteService_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="DeleteService"; + offset = svcctl_dissect_element_DeleteService_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_LockServiceDatabase_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_LockServiceDatabase_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_LockServiceDatabase_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_LockServiceDatabase_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_LockServiceDatabase_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_LockServiceDatabase_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_LockServiceDatabase_lock_handle_, NDR_POINTER_REF, "Pointer to Lock Handle (policy_handle)",hf_svcctl_svcctl_LockServiceDatabase_lock_handle); + + return offset; +} + +static int +svcctl_dissect_element_LockServiceDatabase_lock_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_LockServiceDatabase_lock_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_LockServiceDatabase( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [out] [ref] policy_handle *lock_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_LockServiceDatabase_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="LockServiceDatabase"; + offset = svcctl_dissect_element_LockServiceDatabase_lock_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_LockServiceDatabase_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="LockServiceDatabase"; + offset = svcctl_dissect_element_LockServiceDatabase_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceObjectSecurity_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceObjectSecurity_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceObjectSecurity_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_security_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_security_secinfo(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceObjectSecurity_security_flags, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor_, NDR_POINTER_REF, "Pointer to Security Descriptor (uint8)",hf_svcctl_svcctl_QueryServiceObjectSecurity_security_descriptor); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor__); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceObjectSecurity_security_descriptor, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceObjectSecurity_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_bytes_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceObjectSecurity_bytes_needed_, NDR_POINTER_REF, "Pointer to Bytes Needed (uint32)",hf_svcctl_svcctl_QueryServiceObjectSecurity_bytes_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceObjectSecurity_bytes_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceObjectSecurity_bytes_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceObjectSecurity( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] security_secinfo security_flags, */ +/* IDL: [out] [ref] [size_is(offered)] uint8 *security_descriptor, */ +/* IDL: [in] [range(0,0x40000)] uint32 offered, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *bytes_needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceObjectSecurity_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceObjectSecurity"; + offset = svcctl_dissect_element_QueryServiceObjectSecurity_security_descriptor(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceObjectSecurity_bytes_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceObjectSecurity_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceObjectSecurity"; + offset = svcctl_dissect_element_QueryServiceObjectSecurity_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceObjectSecurity_security_flags(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceObjectSecurity_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SetServiceObjectSecurity_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_SetServiceObjectSecurity_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SetServiceObjectSecurity_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_security_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_security_secinfo(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SetServiceObjectSecurity_security_flags, 0); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor_, NDR_POINTER_REF, "Pointer to Security Descriptor (uint8)",hf_svcctl_svcctl_SetServiceObjectSecurity_security_descriptor); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor__); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SetServiceObjectSecurity_security_descriptor, 0); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceObjectSecurity_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SetServiceObjectSecurity_offered, 0); + + return offset; +} + +/* IDL: WERROR svcctl_SetServiceObjectSecurity( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] security_secinfo security_flags, */ +/* IDL: [in] [ref] [size_is(offered)] uint8 *security_descriptor, */ +/* IDL: [in] uint32 offered */ +/* IDL: ); */ + +static int +svcctl_dissect_SetServiceObjectSecurity_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="SetServiceObjectSecurity"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_SetServiceObjectSecurity_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="SetServiceObjectSecurity"; + offset = svcctl_dissect_element_SetServiceObjectSecurity_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SetServiceObjectSecurity_security_flags(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SetServiceObjectSecurity_security_descriptor(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SetServiceObjectSecurity_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatus_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceStatus_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceStatus_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatus_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceStatus_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatus_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceStatus_service_status_, NDR_POINTER_REF, "Pointer to Service Status (SERVICE_STATUS)",hf_svcctl_svcctl_QueryServiceStatus_service_status); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatus_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_QueryServiceStatus_service_status,0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceStatus( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [out] [ref] SERVICE_STATUS *service_status */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceStatus_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceStatus"; + offset = svcctl_dissect_element_QueryServiceStatus_service_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceStatus_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceStatus"; + offset = svcctl_dissect_element_QueryServiceStatus_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_SetServiceStatus_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SetServiceStatus_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_SetServiceStatus_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceStatus_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SetServiceStatus_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceStatus_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SetServiceStatus_service_status_, NDR_POINTER_REF, "Pointer to Service Status (SERVICE_STATUS)",hf_svcctl_svcctl_SetServiceStatus_service_status); + + return offset; +} + +static int +svcctl_dissect_element_SetServiceStatus_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_SetServiceStatus_service_status,0); + + return offset; +} + +/* IDL: WERROR svcctl_SetServiceStatus( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] [ref] SERVICE_STATUS *service_status */ +/* IDL: ); */ + +static int +svcctl_dissect_SetServiceStatus_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="SetServiceStatus"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_SetServiceStatus_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="SetServiceStatus"; + offset = svcctl_dissect_element_SetServiceStatus_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SetServiceStatus_service_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_UnlockServiceDatabase_lock_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_UnlockServiceDatabase_lock_handle_, NDR_POINTER_REF, "Pointer to Lock Handle (policy_handle)",hf_svcctl_svcctl_UnlockServiceDatabase_lock_handle); + + return offset; +} + +static int +svcctl_dissect_element_UnlockServiceDatabase_lock_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_UnlockServiceDatabase_lock_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_UnlockServiceDatabase( */ +/* IDL: [in] [out] [ref] policy_handle *lock_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_UnlockServiceDatabase_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="UnlockServiceDatabase"; + offset = svcctl_dissect_element_UnlockServiceDatabase_lock_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_UnlockServiceDatabase_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="UnlockServiceDatabase"; + offset = svcctl_dissect_element_UnlockServiceDatabase_lock_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_NotifyBootConfigStatus_machine_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_NotifyBootConfigStatus_machine_name_, NDR_POINTER_UNIQUE, "Pointer to Machine Name (uint16)",hf_svcctl_svcctl_NotifyBootConfigStatus_machine_name); + + return offset; +} + +static int +svcctl_dissect_element_NotifyBootConfigStatus_machine_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_NotifyBootConfigStatus_machine_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_NotifyBootConfigStatus_boot_acceptable(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_NotifyBootConfigStatus_boot_acceptable, 0); + + return offset; +} + +/* IDL: WERROR svcctl_NotifyBootConfigStatus( */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *machine_name, */ +/* IDL: [in] uint32 boot_acceptable */ +/* IDL: ); */ + +static int +svcctl_dissect_NotifyBootConfigStatus_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="NotifyBootConfigStatus"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_NotifyBootConfigStatus_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="NotifyBootConfigStatus"; + offset = svcctl_dissect_element_NotifyBootConfigStatus_machine_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_NotifyBootConfigStatus_boot_acceptable(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SCSetServiceBitsW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_SCSetServiceBitsW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsW_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_service_bits(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsW_service_bits, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_set_bits_on(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsW_set_bits_on, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_update_immediately(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsW_update_immediately, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_lpString(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SCSetServiceBitsW_lpString_, NDR_POINTER_UNIQUE, "Pointer to LpString (uint16)",hf_svcctl_svcctl_SCSetServiceBitsW_lpString); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsW_lpString_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_SCSetServiceBitsW_lpString, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +/* IDL: WERROR svcctl_SCSetServiceBitsW( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] uint32 service_bits, */ +/* IDL: [in] uint32 set_bits_on, */ +/* IDL: [in] uint32 update_immediately, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *lpString */ +/* IDL: ); */ + +static int +svcctl_dissect_SCSetServiceBitsW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="SCSetServiceBitsW"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_SCSetServiceBitsW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="SCSetServiceBitsW"; + offset = svcctl_dissect_element_SCSetServiceBitsW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsW_service_bits(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsW_set_bits_on(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsW_update_immediately(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsW_lpString(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_ChangeServiceConfigW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_binary_path_, NDR_POINTER_UNIQUE, "Pointer to Binary Path (uint16)",hf_svcctl_svcctl_ChangeServiceConfigW_binary_path); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_binary_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ChangeServiceConfigW_binary_path, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_load_order_group(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_load_order_group_, NDR_POINTER_UNIQUE, "Pointer to Load Order Group (uint16)",hf_svcctl_svcctl_ChangeServiceConfigW_load_order_group); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_load_order_group_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ChangeServiceConfigW_load_order_group, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_ChangeServiceConfigW_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (uint16)",hf_svcctl_svcctl_ChangeServiceConfigW_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ChangeServiceConfigW_dependencies, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_dwDependSize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_dwDependSize, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (uint16)",hf_svcctl_svcctl_ChangeServiceConfigW_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ChangeServiceConfigW_service_start_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_password_, NDR_POINTER_UNIQUE, "Pointer to Password (uint16)",hf_svcctl_svcctl_ChangeServiceConfigW_password); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ChangeServiceConfigW_password, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_dwPwSize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigW_dwPwSize, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigW_display_name_, NDR_POINTER_UNIQUE, "Pointer to Display Name (uint16)",hf_svcctl_svcctl_ChangeServiceConfigW_display_name); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_ChangeServiceConfigW_display_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +/* IDL: WERROR svcctl_ChangeServiceConfigW( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *binary_path, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *load_order_group, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [charset(UTF16)] [in] [size_is(dwDependSize)] [unique(1)] uint16 *dependencies, */ +/* IDL: [in] [range(0,SC_MAX_DEPEND_SIZE)] uint32 dwDependSize, */ +/* IDL: [charset(UTF16)] [in] [range(0,SC_MAX_ACCOUNT_NAME_LENGTH)] [unique(1)] uint16 *service_start_name, */ +/* IDL: [charset(UTF16)] [in] [size_is(dwPwSize)] [unique(1)] uint16 *password, */ +/* IDL: [in] [range(0,SC_MAX_PWD_SIZE)] uint32 dwPwSize, */ +/* IDL: [charset(UTF16)] [in] [range(0,SC_MAX_NAME_LENGTH)] [unique(1)] uint16 *display_name */ +/* IDL: ); */ + +static int +svcctl_dissect_ChangeServiceConfigW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ChangeServiceConfigW"; + offset = svcctl_dissect_element_ChangeServiceConfigW_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ChangeServiceConfigW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ChangeServiceConfigW"; + offset = svcctl_dissect_element_ChangeServiceConfigW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_load_order_group(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_dwDependSize(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_dwPwSize(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigW_display_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceW_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_DisplayName_, NDR_POINTER_UNIQUE, "Pointer to DisplayName (uint16)",hf_svcctl_svcctl_CreateServiceW_DisplayName); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceW_DisplayName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_desired_access, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceW_binary_path, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_LoadOrderGroup(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_LoadOrderGroup_, NDR_POINTER_UNIQUE, "Pointer to LoadOrderGroup (uint16)",hf_svcctl_svcctl_CreateServiceW_LoadOrderGroup); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_LoadOrderGroup_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceW_LoadOrderGroup, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_CreateServiceW_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (uint8)",hf_svcctl_svcctl_CreateServiceW_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_dependencies__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_dependencies, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_dependencies_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (uint16)",hf_svcctl_svcctl_CreateServiceW_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceW_service_start_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_password_, NDR_POINTER_UNIQUE, "Pointer to Password (uint8)",hf_svcctl_svcctl_CreateServiceW_password); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_password__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_password, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_password_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceW_service_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_CreateServiceW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(UTF16)] [in] uint16 ServiceName[*], */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *DisplayName, */ +/* IDL: [in] uint32 desired_access, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [charset(UTF16)] [in] uint16 binary_path[*], */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *LoadOrderGroup, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [in] [size_is(dependencies_size)] [unique(1)] uint8 *dependencies, */ +/* IDL: [in] uint32 dependencies_size, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *service_start_name, */ +/* IDL: [in] [size_is(password_size)] [unique(1)] uint8 *password, */ +/* IDL: [in] uint32 password_size, */ +/* IDL: [out] [ref] policy_handle *service_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_CreateServiceW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CreateServiceW"; + offset = svcctl_dissect_element_CreateServiceW_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_CreateServiceW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CreateServiceW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CreateServiceW"; + offset = svcctl_dissect_element_CreateServiceW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_DisplayName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_desired_access(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_LoadOrderGroup(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_dependencies_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceW_password_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_EnumDependentServicesW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesW_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesW_service_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesW_service_status_, NDR_POINTER_REF, "Pointer to Service Status (ENUM_SERVICE_STATUSW)",hf_svcctl_svcctl_EnumDependentServicesW_service_status); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesW_service_status__); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_service_status__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_ENUM_SERVICE_STATUSW(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_EnumDependentServicesW_service_status,0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesW_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_bytesneeded(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesW_bytesneeded_, NDR_POINTER_REF, "Pointer to Bytesneeded (uint32)",hf_svcctl_svcctl_EnumDependentServicesW_bytesneeded); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_bytesneeded_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesW_bytesneeded, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_services_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesW_services_returned_, NDR_POINTER_REF, "Pointer to Services Returned (uint32)",hf_svcctl_svcctl_EnumDependentServicesW_services_returned); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesW_services_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesW_services_returned, 0); + + return offset; +} + +/* IDL: WERROR svcctl_EnumDependentServicesW( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] svcctl_ServiceState service_state, */ +/* IDL: [out] [ref] [size_is(offered)] ENUM_SERVICE_STATUSW *service_status, */ +/* IDL: [in] [range(0,0x40000)] uint32 offered, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *bytesneeded, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *services_returned */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumDependentServicesW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="EnumDependentServicesW"; + offset = svcctl_dissect_element_EnumDependentServicesW_service_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumDependentServicesW_bytesneeded(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumDependentServicesW_services_returned(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_EnumDependentServicesW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumDependentServicesW"; + offset = svcctl_dissect_element_EnumDependentServicesW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumDependentServicesW_service_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumDependentServicesW_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_EnumServicesStatusW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_service_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_resume_index(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusW_resume_index_, NDR_POINTER_UNIQUE, "Pointer to Resume Index (uint32)",hf_svcctl_svcctl_EnumServicesStatusW_resume_index); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusW_resume_index_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_resume_index, 0); + + return offset; +} + +/* IDL: WERROR svcctl_EnumServicesStatusW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_ServiceState service_state, */ +/* IDL: [out] [ref] [size_is(offered)] uint8 *services, */ +/* IDL: [in] [range(0,0x40000)] uint32 offered, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *bytes_needed, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *services_returned, */ +/* IDL: [in] [out] [unique(1)] uint32 *resume_index */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumServicesStatusW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumServicesStatusW"; + offset = svcctl_dissect_element_EnumServicesStatusW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusW_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusW_service_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusW_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusW_resume_index(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_MachineName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManagerW_MachineName_, NDR_POINTER_UNIQUE, "Pointer to MachineName (uint16)",hf_svcctl_svcctl_OpenSCManagerW_MachineName); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_MachineName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_OpenSCManagerW_MachineName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_DatabaseName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManagerW_DatabaseName_, NDR_POINTER_UNIQUE, "Pointer to DatabaseName (uint16)",hf_svcctl_svcctl_OpenSCManagerW_DatabaseName); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_DatabaseName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_OpenSCManagerW_DatabaseName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_MgrAccessMask(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenSCManagerW_access_mask, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManagerW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_OpenSCManagerW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenSCManagerW_scm_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_OpenSCManagerW( */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *MachineName, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *DatabaseName, */ +/* IDL: [in] svcctl_MgrAccessMask access_mask, */ +/* IDL: [out] [ref] policy_handle *scm_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_OpenSCManagerW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="OpenSCManagerW"; + offset = svcctl_dissect_element_OpenSCManagerW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_OpenSCManagerW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="OpenSCManagerW"; + offset = svcctl_dissect_element_OpenSCManagerW_MachineName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenSCManagerW_DatabaseName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenSCManagerW_access_mask(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_OpenServiceW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenServiceW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_OpenServiceW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenServiceW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceW_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_OpenServiceW_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceW_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_ServiceAccessMask(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenServiceW_access_mask, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenServiceW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_OpenServiceW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenServiceW_service_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_OpenServiceW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(UTF16)] [in] uint16 ServiceName[*], */ +/* IDL: [in] svcctl_ServiceAccessMask access_mask, */ +/* IDL: [out] [ref] policy_handle *service_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_OpenServiceW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="OpenServiceW"; + offset = svcctl_dissect_element_OpenServiceW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_OpenServiceW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="OpenServiceW"; + offset = svcctl_dissect_element_OpenServiceW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenServiceW_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenServiceW_access_mask(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceConfigW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigW_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_service_config(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigW_service_config_, NDR_POINTER_REF, "Pointer to Service Config (QUERY_SERVICE_CONFIG)",hf_svcctl_svcctl_QueryServiceConfigW_service_config); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_service_config_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_QUERY_SERVICE_CONFIG(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_QueryServiceConfigW_service_config,0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigW_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigW_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceConfigW_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigW_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigW_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceConfigW( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [out] [ref] QUERY_SERVICE_CONFIG *service_config, */ +/* IDL: [in] [range(0,8192)] uint32 offered, */ +/* IDL: [out] [range(0,8192)] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceConfigW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceConfigW"; + offset = svcctl_dissect_element_QueryServiceConfigW_service_config(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceConfigW_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceConfigW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceConfigW"; + offset = svcctl_dissect_element_QueryServiceConfigW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfigW_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceLockStatusW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceLockStatusW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceLockStatusW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_lock_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceLockStatusW_lock_status_, NDR_POINTER_REF, "Pointer to Lock Status (SERVICE_LOCK_STATUS)",hf_svcctl_svcctl_QueryServiceLockStatusW_lock_status); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_lock_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_LOCK_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_QueryServiceLockStatusW_lock_status,0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceLockStatusW_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceLockStatusW_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceLockStatusW_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusW_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceLockStatusW_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceLockStatusW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [out] [ref] SERVICE_LOCK_STATUS *lock_status, */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceLockStatusW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceLockStatusW"; + offset = svcctl_dissect_element_QueryServiceLockStatusW_lock_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceLockStatusW_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceLockStatusW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceLockStatusW"; + offset = svcctl_dissect_element_QueryServiceLockStatusW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceLockStatusW_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_StartServiceW_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_StartServiceW_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_StartServiceW_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceW_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_StartServiceW_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceW_NumArgs(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_StartServiceW_NumArgs, 0); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceW_Arguments(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_StartServiceW_Arguments_, NDR_POINTER_UNIQUE, "Pointer to Arguments (svcctl_ArgumentString)",hf_svcctl_svcctl_StartServiceW_Arguments); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceW_Arguments_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_StartServiceW_Arguments__); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceW_Arguments__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_ArgumentString(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_StartServiceW_Arguments,0); + + return offset; +} + +/* IDL: WERROR svcctl_StartServiceW( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] [range(0,SC_MAX_ARGUMENTS)] uint32 NumArgs, */ +/* IDL: [in] [size_is(NumArgs)] [unique(1)] svcctl_ArgumentString *Arguments */ +/* IDL: ); */ + +static int +svcctl_dissect_StartServiceW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="StartServiceW"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_StartServiceW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="StartServiceW"; + offset = svcctl_dissect_element_StartServiceW_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_StartServiceW_NumArgs(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_StartServiceW_Arguments(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_GetServiceDisplayNameW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceDisplayNameW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameW_service_name_, NDR_POINTER_UNIQUE, "Pointer to Service Name (uint16)",hf_svcctl_svcctl_GetServiceDisplayNameW_service_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_GetServiceDisplayNameW_service_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameW_display_name_, NDR_POINTER_REF, "Pointer to Display Name (uint16)",hf_svcctl_svcctl_GetServiceDisplayNameW_display_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameW_display_name__, NDR_POINTER_UNIQUE, "Pointer to Display Name (uint16)",hf_svcctl_svcctl_GetServiceDisplayNameW_display_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_display_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_GetServiceDisplayNameW_display_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_display_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameW_display_name_length_, NDR_POINTER_UNIQUE, "Pointer to Display Name Length (uint32)",hf_svcctl_svcctl_GetServiceDisplayNameW_display_name_length); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameW_display_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceDisplayNameW_display_name_length, 0); + + return offset; +} + +/* IDL: WERROR svcctl_GetServiceDisplayNameW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *service_name, */ +/* IDL: [charset(UTF16)] [out] [ref] uint16 **display_name, */ +/* IDL: [in] [out] [unique(1)] uint32 *display_name_length */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceDisplayNameW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceDisplayNameW"; + offset = svcctl_dissect_element_GetServiceDisplayNameW_display_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_GetServiceDisplayNameW_display_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceDisplayNameW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceDisplayNameW"; + offset = svcctl_dissect_element_GetServiceDisplayNameW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceDisplayNameW_service_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceDisplayNameW_display_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_GetServiceKeyNameW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceKeyNameW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameW_display_name_, NDR_POINTER_UNIQUE, "Pointer to Display Name (uint16)",hf_svcctl_svcctl_GetServiceKeyNameW_display_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_GetServiceKeyNameW_display_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameW_service_name_, NDR_POINTER_REF, "Pointer to Service Name (uint16)",hf_svcctl_svcctl_GetServiceKeyNameW_service_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameW_service_name__, NDR_POINTER_UNIQUE, "Pointer to Service Name (uint16)",hf_svcctl_svcctl_GetServiceKeyNameW_service_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_service_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_GetServiceKeyNameW_service_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_service_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameW_service_name_length_, NDR_POINTER_UNIQUE, "Pointer to Service Name Length (uint32)",hf_svcctl_svcctl_GetServiceKeyNameW_service_name_length); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameW_service_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceKeyNameW_service_name_length, 0); + + return offset; +} + +/* IDL: WERROR svcctl_GetServiceKeyNameW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *display_name, */ +/* IDL: [charset(UTF16)] [out] [ref] uint16 **service_name, */ +/* IDL: [in] [out] [unique(1)] uint32 *service_name_length */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceKeyNameW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceKeyNameW"; + offset = svcctl_dissect_element_GetServiceKeyNameW_service_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_GetServiceKeyNameW_service_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceKeyNameW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceKeyNameW"; + offset = svcctl_dissect_element_GetServiceKeyNameW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceKeyNameW_display_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceKeyNameW_service_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SCSetServiceBitsA_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_SCSetServiceBitsA_handle); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsA_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_service_bits(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsA_service_bits, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_set_bits_on(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsA_set_bits_on, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_update_immediately(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_SCSetServiceBitsA_update_immediately, 0); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_lpString(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_SCSetServiceBitsA_lpString_, NDR_POINTER_UNIQUE, "Pointer to LpString (uint16)",hf_svcctl_svcctl_SCSetServiceBitsA_lpString); + + return offset; +} + +static int +svcctl_dissect_element_SCSetServiceBitsA_lpString_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_SCSetServiceBitsA_lpString, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +/* IDL: WERROR svcctl_SCSetServiceBitsA( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [in] uint32 service_bits, */ +/* IDL: [in] uint32 set_bits_on, */ +/* IDL: [in] uint32 update_immediately, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *lpString */ +/* IDL: ); */ + +static int +svcctl_dissect_SCSetServiceBitsA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="SCSetServiceBitsA"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_SCSetServiceBitsA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="SCSetServiceBitsA"; + offset = svcctl_dissect_element_SCSetServiceBitsA_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsA_service_bits(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsA_set_bits_on(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsA_update_immediately(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_SCSetServiceBitsA_lpString(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_ChangeServiceConfigA_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigA_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigA_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigA_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigA_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_binary_path_, NDR_POINTER_UNIQUE, "Pointer to Binary Path (string)",hf_svcctl_svcctl_ChangeServiceConfigA_binary_path); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_binary_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_ChangeServiceConfigA_binary_path , 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_load_order_group(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_load_order_group_, NDR_POINTER_UNIQUE, "Pointer to Load Order Group (string)",hf_svcctl_svcctl_ChangeServiceConfigA_load_order_group); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_load_order_group_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_ChangeServiceConfigA_load_order_group , 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_ChangeServiceConfigA_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfigA_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (string)",hf_svcctl_svcctl_ChangeServiceConfigA_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_ChangeServiceConfigA_dependencies , 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (string)",hf_svcctl_svcctl_ChangeServiceConfigA_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_ChangeServiceConfigA_service_start_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_password_, NDR_POINTER_UNIQUE, "Pointer to Password (string)",hf_svcctl_svcctl_ChangeServiceConfigA_password); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_ChangeServiceConfigA_password , 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfigA_display_name_, NDR_POINTER_UNIQUE, "Pointer to Display Name (string)",hf_svcctl_svcctl_ChangeServiceConfigA_display_name); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfigA_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_ChangeServiceConfigA_display_name , 0); + + return offset; +} + +/* IDL: WERROR svcctl_ChangeServiceConfigA( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *binary_path, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *load_order_group, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *dependencies, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *service_start_name, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *password, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *display_name */ +/* IDL: ); */ + +static int +svcctl_dissect_ChangeServiceConfigA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ChangeServiceConfigA"; + offset = svcctl_dissect_element_ChangeServiceConfigA_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ChangeServiceConfigA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ChangeServiceConfigA"; + offset = svcctl_dissect_element_ChangeServiceConfigA_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_load_order_group(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfigA_display_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceA_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_DisplayName_, NDR_POINTER_UNIQUE, "Pointer to DisplayName (uint8)",hf_svcctl_svcctl_CreateServiceA_DisplayName); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceA_DisplayName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_desired_access, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceA_binary_path, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_LoadOrderGroupKey_, NDR_POINTER_UNIQUE, "Pointer to LoadOrderGroupKey (uint8)",hf_svcctl_svcctl_CreateServiceA_LoadOrderGroupKey); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceA_LoadOrderGroupKey, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_CreateServiceA_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (string)",hf_svcctl_svcctl_CreateServiceA_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_dependencies__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_CreateServiceA_dependencies , 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_dependencies_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (uint8)",hf_svcctl_svcctl_CreateServiceA_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceA_service_start_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_password_, NDR_POINTER_UNIQUE, "Pointer to Password (uint8)",hf_svcctl_svcctl_CreateServiceA_password); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_password__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_password, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_password_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceA_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceA_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceA_service_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_CreateServiceA( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(ASCII)] [in] uint8 ServiceName[*], */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *DisplayName, */ +/* IDL: [in] uint32 desired_access, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [charset(ASCII)] [in] uint8 binary_path[*], */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *LoadOrderGroupKey, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [size_is(dependencies_size)] [unique(1)] string *dependencies, */ +/* IDL: [in] uint32 dependencies_size, */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *service_start_name, */ +/* IDL: [in] [size_is(password_size)] [unique(1)] uint8 *password, */ +/* IDL: [in] uint32 password_size, */ +/* IDL: [out] [ref] policy_handle *service_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_CreateServiceA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CreateServiceA"; + offset = svcctl_dissect_element_CreateServiceA_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_CreateServiceA_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CreateServiceA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CreateServiceA"; + offset = svcctl_dissect_element_CreateServiceA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_DisplayName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_desired_access(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_LoadOrderGroupKey(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_dependencies_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceA_password_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesA_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_EnumDependentServicesA_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesA_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesA_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_service_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesA_service_status_, NDR_POINTER_REF, "Pointer to Service Status (ENUM_SERVICE_STATUSA)",hf_svcctl_svcctl_EnumDependentServicesA_service_status); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_service_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_ENUM_SERVICE_STATUSA(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_EnumDependentServicesA_service_status,0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesA_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesA_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_EnumDependentServicesA_needed); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesA_needed, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_services_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumDependentServicesA_services_returned_, NDR_POINTER_REF, "Pointer to Services Returned (uint32)",hf_svcctl_svcctl_EnumDependentServicesA_services_returned); + + return offset; +} + +static int +svcctl_dissect_element_EnumDependentServicesA_services_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumDependentServicesA_services_returned, 0); + + return offset; +} + +/* IDL: WERROR svcctl_EnumDependentServicesA( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] svcctl_ServiceState state, */ +/* IDL: [out] [ref] ENUM_SERVICE_STATUSA *service_status, */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [ref] uint32 *needed, */ +/* IDL: [out] [ref] uint32 *services_returned */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumDependentServicesA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="EnumDependentServicesA"; + offset = svcctl_dissect_element_EnumDependentServicesA_service_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumDependentServicesA_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumDependentServicesA_services_returned(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_EnumDependentServicesA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumDependentServicesA"; + offset = svcctl_dissect_element_EnumDependentServicesA_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumDependentServicesA_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumDependentServicesA_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_EnumServicesStatusA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_service_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_service(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusA_service_); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_service_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_service, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusA_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_EnumServicesStatusA_needed); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_needed, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_services_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusA_services_returned_, NDR_POINTER_REF, "Pointer to Services Returned (uint32)",hf_svcctl_svcctl_EnumServicesStatusA_services_returned); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_services_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_services_returned, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_resume_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusA_resume_handle_, NDR_POINTER_UNIQUE, "Pointer to Resume Handle (uint32)",hf_svcctl_svcctl_EnumServicesStatusA_resume_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusA_resume_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusA_resume_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_EnumServicesStatusA( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_ServiceState service_state, */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [size_is(offered)] uint8 service[*], */ +/* IDL: [out] [ref] uint32 *needed, */ +/* IDL: [out] [ref] uint32 *services_returned, */ +/* IDL: [in] [out] [unique(1)] uint32 *resume_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumServicesStatusA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="EnumServicesStatusA"; + offset = svcctl_dissect_element_EnumServicesStatusA_service(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusA_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusA_services_returned(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusA_resume_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_EnumServicesStatusA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumServicesStatusA"; + offset = svcctl_dissect_element_EnumServicesStatusA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusA_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusA_service_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusA_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusA_resume_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_MachineName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManagerA_MachineName_, NDR_POINTER_UNIQUE, "Pointer to MachineName (uint8)",hf_svcctl_svcctl_OpenSCManagerA_MachineName); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_MachineName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_OpenSCManagerA_MachineName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_DatabaseName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManagerA_DatabaseName_, NDR_POINTER_UNIQUE, "Pointer to DatabaseName (uint8)",hf_svcctl_svcctl_OpenSCManagerA_DatabaseName); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_DatabaseName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_OpenSCManagerA_DatabaseName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_MgrAccessMask(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenSCManagerA_access_mask, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManagerA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_OpenSCManagerA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManagerA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenSCManagerA_scm_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_OpenSCManagerA( */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *MachineName, */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *DatabaseName, */ +/* IDL: [in] svcctl_MgrAccessMask access_mask, */ +/* IDL: [out] [ref] policy_handle *scm_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_OpenSCManagerA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="OpenSCManagerA"; + offset = svcctl_dissect_element_OpenSCManagerA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_OpenSCManagerA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="OpenSCManagerA"; + offset = svcctl_dissect_element_OpenSCManagerA_MachineName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenSCManagerA_DatabaseName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenSCManagerA_access_mask(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_OpenServiceA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenServiceA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_OpenServiceA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenServiceA_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceA_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_OpenServiceA_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceA_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_bitmap_MgrAccessMask(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenServiceA_access_mask, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenServiceA_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_OpenServiceA_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenServiceA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenServiceA_service_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_OpenServiceA( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(ASCII)] [in] uint8 ServiceName[*], */ +/* IDL: [in] svcctl_MgrAccessMask access_mask, */ +/* IDL: [out] [ref] policy_handle *service_handle */ +/* IDL: ); */ + +static int +svcctl_dissect_OpenServiceA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="OpenServiceA"; + offset = svcctl_dissect_element_OpenServiceA_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_OpenServiceA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="OpenServiceA"; + offset = svcctl_dissect_element_OpenServiceA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenServiceA_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenServiceA_access_mask(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigA_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceConfigA_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigA_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_query(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigA_query_); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_query_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigA_query, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigA_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigA_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceConfigA_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigA_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceConfigA( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [out] [size_is(cbBufSize)] uint8 query[*], */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceConfigA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceConfigA"; + offset = svcctl_dissect_element_QueryServiceConfigA_query(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceConfigA_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceConfigA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceConfigA"; + offset = svcctl_dissect_element_QueryServiceConfigA_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfigA_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceLockStatusA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceLockStatusA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceLockStatusA_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_lock_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceLockStatusA_lock_status_, NDR_POINTER_REF, "Pointer to Lock Status (SERVICE_LOCK_STATUS)",hf_svcctl_svcctl_QueryServiceLockStatusA_lock_status); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_lock_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_SERVICE_LOCK_STATUS(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_QueryServiceLockStatusA_lock_status,0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceLockStatusA_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceLockStatusA_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceLockStatusA_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceLockStatusA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceLockStatusA_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceLockStatusA( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [out] [ref] SERVICE_LOCK_STATUS *lock_status, */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceLockStatusA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceLockStatusA"; + offset = svcctl_dissect_element_QueryServiceLockStatusA_lock_status(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceLockStatusA_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceLockStatusA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceLockStatusA"; + offset = svcctl_dissect_element_QueryServiceLockStatusA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceLockStatusA_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_StartServiceA_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_StartServiceA_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_StartServiceA_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceA_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_StartServiceA_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceA_NumArgs(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_StartServiceA_NumArgs, 0); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceA_Arguments(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_StartServiceA_Arguments_, NDR_POINTER_UNIQUE, "Pointer to Arguments (svcctl_ArgumentStringA)",hf_svcctl_svcctl_StartServiceA_Arguments); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceA_Arguments_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_StartServiceA_Arguments__); + + return offset; +} + +static int +svcctl_dissect_element_StartServiceA_Arguments__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_struct_ArgumentStringA(tvb,offset,pinfo,tree,di,drep,hf_svcctl_svcctl_StartServiceA_Arguments,0); + + return offset; +} + +/* IDL: WERROR svcctl_StartServiceA( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] uint32 NumArgs, */ +/* IDL: [in] [size_is(NumArgs)] [unique(1)] svcctl_ArgumentStringA *Arguments */ +/* IDL: ); */ + +static int +svcctl_dissect_StartServiceA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="StartServiceA"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_StartServiceA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="StartServiceA"; + offset = svcctl_dissect_element_StartServiceA_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_StartServiceA_NumArgs(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_StartServiceA_Arguments(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameA_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_GetServiceDisplayNameA_handle); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceDisplayNameA_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameA_service_name_, NDR_POINTER_UNIQUE, "Pointer to Service Name (string)",hf_svcctl_svcctl_GetServiceDisplayNameA_service_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_GetServiceDisplayNameA_service_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_display_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameA_display_name_, NDR_POINTER_REF, "Pointer to Display Name (uint8)",hf_svcctl_svcctl_GetServiceDisplayNameA_display_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_display_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameA_display_name__, NDR_POINTER_UNIQUE, "Pointer to Display Name (uint8)",hf_svcctl_svcctl_GetServiceDisplayNameA_display_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_display_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_GetServiceDisplayNameA_display_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_display_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceDisplayNameA_display_name_length_, NDR_POINTER_UNIQUE, "Pointer to Display Name Length (uint32)",hf_svcctl_svcctl_GetServiceDisplayNameA_display_name_length); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceDisplayNameA_display_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceDisplayNameA_display_name_length, 0); + + return offset; +} + +/* IDL: WERROR svcctl_GetServiceDisplayNameA( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *service_name, */ +/* IDL: [charset(ASCII)] [out] [ref] uint8 **display_name, */ +/* IDL: [in] [out] [unique(1)] uint32 *display_name_length */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceDisplayNameA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceDisplayNameA"; + offset = svcctl_dissect_element_GetServiceDisplayNameA_display_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_GetServiceDisplayNameA_display_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceDisplayNameA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceDisplayNameA"; + offset = svcctl_dissect_element_GetServiceDisplayNameA_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceDisplayNameA_service_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceDisplayNameA_display_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_GetServiceKeyNameA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceKeyNameA_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_service_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameA_service_name_, NDR_POINTER_UNIQUE, "Pointer to Service Name (string)",hf_svcctl_svcctl_GetServiceKeyNameA_service_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_service_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_GetServiceKeyNameA_service_name , 0); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_key_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameA_key_name_, NDR_POINTER_REF, "Pointer to Key Name (uint8)",hf_svcctl_svcctl_GetServiceKeyNameA_key_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_key_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameA_key_name__, NDR_POINTER_UNIQUE, "Pointer to Key Name (uint8)",hf_svcctl_svcctl_GetServiceKeyNameA_key_name); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_key_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_GetServiceKeyNameA_key_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_display_name_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetServiceKeyNameA_display_name_length_, NDR_POINTER_UNIQUE, "Pointer to Display Name Length (uint32)",hf_svcctl_svcctl_GetServiceKeyNameA_display_name_length); + + return offset; +} + +static int +svcctl_dissect_element_GetServiceKeyNameA_display_name_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetServiceKeyNameA_display_name_length, 0); + + return offset; +} + +/* IDL: WERROR svcctl_GetServiceKeyNameA( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [unique(1)] string *service_name, */ +/* IDL: [charset(ASCII)] [out] [ref] uint8 **key_name, */ +/* IDL: [in] [out] [unique(1)] uint32 *display_name_length */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceKeyNameA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceKeyNameA"; + offset = svcctl_dissect_element_GetServiceKeyNameA_key_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_GetServiceKeyNameA_display_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceKeyNameA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceKeyNameA"; + offset = svcctl_dissect_element_GetServiceKeyNameA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceKeyNameA_service_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetServiceKeyNameA_display_name_length(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_GetCurrentGroupeStateW_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetCurrentGroupeStateW_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_GetCurrentGroupeStateW_handle); + + return offset; +} + +static int +svcctl_dissect_element_GetCurrentGroupeStateW_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetCurrentGroupeStateW_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_GetCurrentGroupeStateW_lpLoadOrderGroup(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetCurrentGroupeStateW_lpLoadOrderGroup_, NDR_POINTER_UNIQUE, "Pointer to LpLoadOrderGroup (uint16)",hf_svcctl_svcctl_GetCurrentGroupeStateW_lpLoadOrderGroup); + + return offset; +} + +static int +svcctl_dissect_element_GetCurrentGroupeStateW_lpLoadOrderGroup_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_GetCurrentGroupeStateW_lpLoadOrderGroup, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_GetCurrentGroupeStateW_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_GetCurrentGroupeStateW_state_, NDR_POINTER_REF, "Pointer to State (uint32)",hf_svcctl_svcctl_GetCurrentGroupeStateW_state); + + return offset; +} + +static int +svcctl_dissect_element_GetCurrentGroupeStateW_state_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_GetCurrentGroupeStateW_state, 0); + + return offset; +} + +/* IDL: WERROR svcctl_GetCurrentGroupeStateW( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *lpLoadOrderGroup, */ +/* IDL: [out] [ref] uint32 *state */ +/* IDL: ); */ + +static int +svcctl_dissect_GetCurrentGroupeStateW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetCurrentGroupeStateW"; + offset = svcctl_dissect_element_GetCurrentGroupeStateW_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetCurrentGroupeStateW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetCurrentGroupeStateW"; + offset = svcctl_dissect_element_GetCurrentGroupeStateW_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_GetCurrentGroupeStateW_lpLoadOrderGroup(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServiceGroupW_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_EnumServiceGroupW_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_service_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_service_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_lpBuffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServiceGroupW_lpBuffer_); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_lpBuffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_lpBuffer, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_cbBufSize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_cbBufSize, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_pcbBytesNeeded(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServiceGroupW_pcbBytesNeeded_, NDR_POINTER_REF, "Pointer to PcbBytesNeeded (uint32)",hf_svcctl_svcctl_EnumServiceGroupW_pcbBytesNeeded); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_pcbBytesNeeded_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_pcbBytesNeeded, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_lpServicesReturned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServiceGroupW_lpServicesReturned_, NDR_POINTER_REF, "Pointer to LpServicesReturned (uint32)",hf_svcctl_svcctl_EnumServiceGroupW_lpServicesReturned); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_lpServicesReturned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_lpServicesReturned, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_ResumeIndex(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServiceGroupW_ResumeIndex_, NDR_POINTER_UNIQUE, "Pointer to ResumeIndex (uint32)",hf_svcctl_svcctl_EnumServiceGroupW_ResumeIndex); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_ResumeIndex_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServiceGroupW_ResumeIndex, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_pszGroupName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServiceGroupW_pszGroupName_, NDR_POINTER_UNIQUE, "Pointer to PszGroupName (uint16)",hf_svcctl_svcctl_EnumServiceGroupW_pszGroupName); + + return offset; +} + +static int +svcctl_dissect_element_EnumServiceGroupW_pszGroupName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_EnumServiceGroupW_pszGroupName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +/* IDL: WERROR svcctl_EnumServiceGroupW( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_ServiceState service_state, */ +/* IDL: [out] [size_is(cbBufSize)] uint8 lpBuffer[*], */ +/* IDL: [in] [range(0,1024*256)] uint32 cbBufSize, */ +/* IDL: [out] [range(0,1024*256)] [ref] uint32 *pcbBytesNeeded, */ +/* IDL: [out] [range(0,1024*256)] [ref] uint32 *lpServicesReturned, */ +/* IDL: [in] [out] [unique(1)] uint32 *ResumeIndex, */ +/* IDL: [charset(UTF16)] [in] [range(0,SC_MAX_NAME_LENGTH)] [unique(1)] uint16 *pszGroupName */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumServiceGroupW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="EnumServiceGroupW"; + offset = svcctl_dissect_element_EnumServiceGroupW_lpBuffer(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServiceGroupW_pcbBytesNeeded(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServiceGroupW_lpServicesReturned(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServiceGroupW_ResumeIndex(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_EnumServiceGroupW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumServiceGroupW"; + offset = svcctl_dissect_element_EnumServiceGroupW_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServiceGroupW_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServiceGroupW_service_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServiceGroupW_cbBufSize(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServiceGroupW_ResumeIndex(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServiceGroupW_pszGroupName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2A_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfig2A_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_ChangeServiceConfig2A_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2A_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfig2A_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2A_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfig2A_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2A_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfig2A_info_, NDR_POINTER_UNIQUE, "Pointer to Info (uint8)",hf_svcctl_svcctl_ChangeServiceConfig2A_info); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2A_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfig2A_info, 0); + + return offset; +} + +/* IDL: WERROR svcctl_ChangeServiceConfig2A( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] uint32 info_level, */ +/* IDL: [in] [unique(1)] uint8 *info */ +/* IDL: ); */ + +static int +svcctl_dissect_ChangeServiceConfig2A_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ChangeServiceConfig2A"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ChangeServiceConfig2A_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ChangeServiceConfig2A"; + offset = svcctl_dissect_element_ChangeServiceConfig2A_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfig2A_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfig2A_info(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2W_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfig2W_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_ChangeServiceConfig2W_handle); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2W_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfig2W_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2W_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfig2W_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2W_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_ChangeServiceConfig2W_info_, NDR_POINTER_UNIQUE, "Pointer to Info (uint8)",hf_svcctl_svcctl_ChangeServiceConfig2W_info); + + return offset; +} + +static int +svcctl_dissect_element_ChangeServiceConfig2W_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_ChangeServiceConfig2W_info, 0); + + return offset; +} + +/* IDL: WERROR svcctl_ChangeServiceConfig2W( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [in] uint32 info_level, */ +/* IDL: [in] [unique(1)] uint8 *info */ +/* IDL: ); */ + +static int +svcctl_dissect_ChangeServiceConfig2W_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ChangeServiceConfig2W"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ChangeServiceConfig2W_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ChangeServiceConfig2W"; + offset = svcctl_dissect_element_ChangeServiceConfig2W_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfig2W_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_ChangeServiceConfig2W_info(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2A_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceConfig2A_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2A_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ConfigLevel(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2A_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2A_buffer_); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2A_buffer, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2A_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2A_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceConfig2A_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2A_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2A_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceConfig2A( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [in] svcctl_ConfigLevel info_level, */ +/* IDL: [out] [size_is(offered)] uint8 buffer[*], */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceConfig2A_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceConfig2A"; + offset = svcctl_dissect_element_QueryServiceConfig2A_buffer(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceConfig2A_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceConfig2A_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceConfig2A"; + offset = svcctl_dissect_element_QueryServiceConfig2A_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfig2A_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfig2A_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2W_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceConfig2W_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2W_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ConfigLevel(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2W_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2W_buffer_, NDR_POINTER_REF, "Pointer to Buffer (uint8)",hf_svcctl_svcctl_QueryServiceConfig2W_buffer); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2W_buffer__); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_buffer__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2W_buffer, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2W_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfig2W_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceConfig2W_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfig2W_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfig2W_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceConfig2W( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [in] svcctl_ConfigLevel info_level, */ +/* IDL: [out] [ref] [size_is(offered)] uint8 *buffer, */ +/* IDL: [in] [range(0,8192)] uint32 offered, */ +/* IDL: [out] [range(0,8192)] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceConfig2W_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceConfig2W"; + offset = svcctl_dissect_element_QueryServiceConfig2W_buffer(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceConfig2W_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceConfig2W_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceConfig2W"; + offset = svcctl_dissect_element_QueryServiceConfig2W_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfig2W_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfig2W_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceStatusEx_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceStatusEx_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceStatusEx_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StatusLevel(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceStatusEx_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceStatusEx_buffer_, NDR_POINTER_REF, "Pointer to Buffer (uint8)",hf_svcctl_svcctl_QueryServiceStatusEx_buffer); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceStatusEx_buffer__); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_buffer__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceStatusEx_buffer, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceStatusEx_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceStatusEx_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_svcctl_QueryServiceStatusEx_needed); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceStatusEx_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceStatusEx_needed, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceStatusEx( */ +/* IDL: [in] [ref] policy_handle *handle, */ +/* IDL: [in] svcctl_StatusLevel info_level, */ +/* IDL: [out] [ref] [size_is(offered)] uint8 *buffer, */ +/* IDL: [in] [range(0,8192)] uint32 offered, */ +/* IDL: [out] [range(0,8192)] [ref] uint32 *needed */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceStatusEx_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceStatusEx"; + offset = svcctl_dissect_element_QueryServiceStatusEx_buffer(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_QueryServiceStatusEx_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceStatusEx_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceStatusEx"; + offset = svcctl_dissect_element_QueryServiceStatusEx_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceStatusEx_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceStatusEx_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_EnumServicesStatusExA_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_services(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_services_); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_services_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_services, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_EnumServicesStatusExA_needed); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_needed, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_service_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_service_returned_, NDR_POINTER_REF, "Pointer to Service Returned (uint32)",hf_svcctl_EnumServicesStatusExA_service_returned); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_service_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_service_returned, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_resume_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_resume_handle_, NDR_POINTER_UNIQUE, "Pointer to Resume Handle (uint32)",hf_svcctl_EnumServicesStatusExA_resume_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_resume_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExA_resume_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_group_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_group_name_, NDR_POINTER_REF, "Pointer to Group Name (uint16)",hf_svcctl_EnumServicesStatusExA_group_name); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_group_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExA_group_name__, NDR_POINTER_UNIQUE, "Pointer to Group Name (uint16)",hf_svcctl_EnumServicesStatusExA_group_name); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExA_group_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_EnumServicesStatusExA_group_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +/* IDL: WERROR EnumServicesStatusExA( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [in] uint32 info_level, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_ServiceState state, */ +/* IDL: [out] [size_is(offered)] uint8 services[*], */ +/* IDL: [in] uint32 offered, */ +/* IDL: [out] [ref] uint32 *needed, */ +/* IDL: [out] [ref] uint32 *service_returned, */ +/* IDL: [in] [out] [unique(1)] uint32 *resume_handle, */ +/* IDL: [charset(UTF16)] [out] [ref] uint16 **group_name */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumServicesStatusExA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="EnumServicesStatusExA"; + offset = svcctl_dissect_element_EnumServicesStatusExA_services(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExA_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExA_service_returned(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExA_resume_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExA_group_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_EnumServicesStatusExA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumServicesStatusExA"; + offset = svcctl_dissect_element_EnumServicesStatusExA_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExA_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExA_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExA_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExA_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExA_resume_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_scmanager(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_scmanager_, NDR_POINTER_REF, "Pointer to Scmanager (policy_handle)",hf_svcctl_EnumServicesStatusExW_scmanager); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_scmanager_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_scmanager, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_info_level, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_state(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceState(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_state, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_services(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_services_, NDR_POINTER_REF, "Pointer to Services (uint8)",hf_svcctl_EnumServicesStatusExW_services); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_services_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_services__); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_services__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_services, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_offered, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_svcctl_EnumServicesStatusExW_needed); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_needed, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_service_returned(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_service_returned_, NDR_POINTER_REF, "Pointer to Service Returned (uint32)",hf_svcctl_EnumServicesStatusExW_service_returned); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_service_returned_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_service_returned, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_resume_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_resume_handle_, NDR_POINTER_UNIQUE, "Pointer to Resume Handle (uint32)",hf_svcctl_EnumServicesStatusExW_resume_handle); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_resume_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_EnumServicesStatusExW_resume_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_group_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_EnumServicesStatusExW_group_name_, NDR_POINTER_UNIQUE, "Pointer to Group Name (uint16)",hf_svcctl_EnumServicesStatusExW_group_name); + + return offset; +} + +static int +svcctl_dissect_element_EnumServicesStatusExW_group_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_EnumServicesStatusExW_group_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +/* IDL: WERROR EnumServicesStatusExW( */ +/* IDL: [in] [ref] policy_handle *scmanager, */ +/* IDL: [in] uint32 info_level, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_ServiceState state, */ +/* IDL: [out] [ref] [size_is(offered)] uint8 *services, */ +/* IDL: [in] [range(0,0x40000)] uint32 offered, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *needed, */ +/* IDL: [out] [range(0,0x40000)] [ref] uint32 *service_returned, */ +/* IDL: [in] [out] [range(0,0x40000)] [unique(1)] uint32 *resume_handle, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *group_name */ +/* IDL: ); */ + +static int +svcctl_dissect_EnumServicesStatusExW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="EnumServicesStatusExW"; + offset = svcctl_dissect_element_EnumServicesStatusExW_services(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExW_needed(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExW_service_returned(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_EnumServicesStatusExW_resume_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_EnumServicesStatusExW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="EnumServicesStatusExW"; + offset = svcctl_dissect_element_EnumServicesStatusExW_scmanager(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExW_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExW_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExW_state(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExW_offered(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExW_resume_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_EnumServicesStatusExW_group_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +/* IDL: WERROR svcctl_ScBroadcastServiceControlMessage( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScBroadcastServiceControlMessage_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScBroadcastServiceControlMessage"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScBroadcastServiceControlMessage_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScBroadcastServiceControlMessage"; + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceWOW64A_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceWOW64A_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_DisplayName_, NDR_POINTER_UNIQUE, "Pointer to DisplayName (uint8)",hf_svcctl_svcctl_CreateServiceWOW64A_DisplayName); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceWOW64A_DisplayName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_desired_access, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceWOW64A_binary_path, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_LoadOrderGroupKey_, NDR_POINTER_UNIQUE, "Pointer to LoadOrderGroupKey (uint8)",hf_svcctl_svcctl_CreateServiceWOW64A_LoadOrderGroupKey); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceWOW64A_LoadOrderGroupKey, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_CreateServiceWOW64A_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (string)",hf_svcctl_svcctl_CreateServiceWOW64A_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_dependencies__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_svcctl_svcctl_CreateServiceWOW64A_dependencies , 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_dependencies_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (uint8)",hf_svcctl_svcctl_CreateServiceWOW64A_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_svcctl_svcctl_CreateServiceWOW64A_service_start_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_password_, NDR_POINTER_UNIQUE, "Pointer to Password (uint8)",hf_svcctl_svcctl_CreateServiceWOW64A_password); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_password__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_password, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_password_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64A_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceWOW64A_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64A_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64A_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_CreateServiceWOW64A( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(ASCII)] [in] uint8 ServiceName[*], */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *DisplayName, */ +/* IDL: [in] uint32 desired_access, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [charset(ASCII)] [in] uint8 binary_path[*], */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *LoadOrderGroupKey, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] [in] [size_is(dependencies_size)] [unique(1)] string *dependencies, */ +/* IDL: [in] uint32 dependencies_size, */ +/* IDL: [charset(ASCII)] [in] [unique(1)] uint8 *service_start_name, */ +/* IDL: [in] [size_is(password_size)] [unique(1)] uint8 *password, */ +/* IDL: [in] uint32 password_size, */ +/* IDL: [out] [ref] policy_handle *handle */ +/* IDL: ); */ + +static int +svcctl_dissect_CreateServiceWOW64A_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CreateServiceWOW64A"; + offset = svcctl_dissect_element_CreateServiceWOW64A_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_CreateServiceWOW64A_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CreateServiceWOW64A_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CreateServiceWOW64A"; + offset = svcctl_dissect_element_CreateServiceWOW64A_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_DisplayName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_desired_access(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_LoadOrderGroupKey(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_dependencies_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64A_password_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceWOW64W_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceWOW64W_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_DisplayName_, NDR_POINTER_UNIQUE, "Pointer to DisplayName (uint16)",hf_svcctl_svcctl_CreateServiceWOW64W_DisplayName); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceWOW64W_DisplayName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_desired_access, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ServiceType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceWOW64W_binary_path, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_LoadOrderGroupKey_, NDR_POINTER_UNIQUE, "Pointer to LoadOrderGroupKey (uint16)",hf_svcctl_svcctl_CreateServiceWOW64W_LoadOrderGroupKey); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceWOW64W_LoadOrderGroupKey, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_CreateServiceWOW64W_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (uint8)",hf_svcctl_svcctl_CreateServiceWOW64W_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_dependencies__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_dependencies, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_dependencies_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (uint16)",hf_svcctl_svcctl_CreateServiceWOW64W_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateServiceWOW64W_service_start_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_password_, NDR_POINTER_UNIQUE, "Pointer to Password (uint8)",hf_svcctl_svcctl_CreateServiceWOW64W_password); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_password__); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_password, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_password_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateServiceWOW64W_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_CreateServiceWOW64W_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateServiceWOW64W_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateServiceWOW64W_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_CreateServiceWOW64W( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(UTF16)] [in] uint16 ServiceName[*], */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *DisplayName, */ +/* IDL: [in] uint32 desired_access, */ +/* IDL: [in] svcctl_ServiceType service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [charset(UTF16)] [in] uint16 binary_path[*], */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *LoadOrderGroupKey, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [in] [size_is(dependencies_size)] [unique(1)] uint8 *dependencies, */ +/* IDL: [in] uint32 dependencies_size, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *service_start_name, */ +/* IDL: [in] [size_is(password_size)] [unique(1)] uint8 *password, */ +/* IDL: [in] uint32 password_size, */ +/* IDL: [out] [ref] policy_handle *handle */ +/* IDL: ); */ + +static int +svcctl_dissect_CreateServiceWOW64W_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CreateServiceWOW64W"; + offset = svcctl_dissect_element_CreateServiceWOW64W_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_CreateServiceWOW64W_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CreateServiceWOW64W_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CreateServiceWOW64W"; + offset = svcctl_dissect_element_CreateServiceWOW64W_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_DisplayName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_desired_access(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_LoadOrderGroupKey(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_dependencies_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateServiceWOW64W_password_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +/* IDL: WERROR svcctl_ScQueryServiceTagInfo( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScQueryServiceTagInfo_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScQueryServiceTagInfo"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScQueryServiceTagInfo_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScQueryServiceTagInfo"; + return offset; +} + +/* IDL: WERROR svcctl_NotifyServiceStatusChange( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_NotifyServiceStatusChange_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="NotifyServiceStatusChange"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_NotifyServiceStatusChange_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="NotifyServiceStatusChange"; + return offset; +} + +/* IDL: WERROR svcctl_GetNotifyResults( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_GetNotifyResults_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetNotifyResults"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetNotifyResults_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetNotifyResults"; + return offset; +} + +/* IDL: WERROR svcctl_CloseNotifyHandle( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_CloseNotifyHandle_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CloseNotifyHandle"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CloseNotifyHandle_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CloseNotifyHandle"; + return offset; +} + +/* IDL: WERROR svcctl_ControlServiceExA( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ControlServiceExA_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ControlServiceExA"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ControlServiceExA_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ControlServiceExA"; + return offset; +} + +/* IDL: WERROR svcctl_ControlServiceExW( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ControlServiceExW_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ControlServiceExW"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ControlServiceExW_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ControlServiceExW"; + return offset; +} + +/* IDL: WERROR svcctl_ScSendPnPMessage( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScSendPnPMessage_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScSendPnPMessage"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScSendPnPMessage_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScSendPnPMessage"; + return offset; +} + +/* IDL: WERROR svcctl_ScValidatePnPService( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScValidatePnPService_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScValidatePnPService"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScValidatePnPService_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScValidatePnPService"; + return offset; +} + +/* IDL: WERROR svcctl_ScOpenServiceStatusHandle( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScOpenServiceStatusHandle_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScOpenServiceStatusHandle"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScOpenServiceStatusHandle_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScOpenServiceStatusHandle"; + return offset; +} + +/* IDL: WERROR svcctl_ScQueryServiceConfig( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScQueryServiceConfig_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScQueryServiceConfig"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScQueryServiceConfig_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScQueryServiceConfig"; + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigEx_service_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_QueryServiceConfigEx_service_handle_, NDR_POINTER_REF, "Pointer to Service Handle (policy_handle)",hf_svcctl_svcctl_QueryServiceConfigEx_service_handle); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigEx_service_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigEx_service_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_QueryServiceConfigEx_info_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_QueryServiceConfigEx_info_level, 0); + + return offset; +} + +/* IDL: WERROR svcctl_QueryServiceConfigEx( */ +/* IDL: [in] [ref] policy_handle *service_handle, */ +/* IDL: [in] uint32 info_level */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryServiceConfigEx_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryServiceConfigEx"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryServiceConfigEx_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryServiceConfigEx"; + offset = svcctl_dissect_element_QueryServiceConfigEx_service_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_QueryServiceConfigEx_info_level(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +/* IDL: WERROR svcctl_ScRegisterPreshutdownRestart( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScRegisterPreshutdownRestart_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScRegisterPreshutdownRestart"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScRegisterPreshutdownRestart_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScRegisterPreshutdownRestart"; + return offset; +} + +/* IDL: WERROR svcctl_ScReparseServiceDatabase( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_ScReparseServiceDatabase_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="ScReparseServiceDatabase"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_ScReparseServiceDatabase_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ScReparseServiceDatabase"; + return offset; +} + +/* IDL: WERROR svcctl_QueryUserServiceName( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_QueryUserServiceName_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="QueryUserServiceName"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_QueryUserServiceName_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="QueryUserServiceName"; + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_scm_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_scm_handle_, NDR_POINTER_REF, "Pointer to Scm Handle (policy_handle)",hf_svcctl_svcctl_CreateWowService_scm_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_scm_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_scm_handle, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_ServiceName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateWowService_ServiceName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_DisplayName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_DisplayName_, NDR_POINTER_UNIQUE, "Pointer to DisplayName (uint16)",hf_svcctl_svcctl_CreateWowService_DisplayName); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_DisplayName_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateWowService_DisplayName, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_desired_access, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_service_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_service_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_start_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_StartType(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_start_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_error_control(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = svcctl_dissect_enum_ErrorControl(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_error_control, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_binary_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateWowService_binary_path, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_LoadOrderGroupKey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_LoadOrderGroupKey_, NDR_POINTER_UNIQUE, "Pointer to LoadOrderGroupKey (uint16)",hf_svcctl_svcctl_CreateWowService_LoadOrderGroupKey); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_LoadOrderGroupKey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateWowService_LoadOrderGroupKey, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_tag_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_tag_id_, NDR_POINTER_UNIQUE, "Pointer to Tag Id (uint32)",hf_svcctl_svcctl_CreateWowService_tag_id); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_tag_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_tag_id, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_dependencies(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_dependencies_, NDR_POINTER_UNIQUE, "Pointer to Dependencies (uint8)",hf_svcctl_svcctl_CreateWowService_dependencies); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_dependencies_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_dependencies__); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_dependencies__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_dependencies, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_dependencies_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_dependencies_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_service_start_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_service_start_name_, NDR_POINTER_UNIQUE, "Pointer to Service Start Name (uint16)",hf_svcctl_svcctl_CreateWowService_service_start_name); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_service_start_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_CreateWowService_service_start_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_password_, NDR_POINTER_UNIQUE, "Pointer to Password (uint8)",hf_svcctl_svcctl_CreateWowService_password); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_password_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_password__); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_password__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_password, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_password_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_password_size, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_service_wow_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_service_wow_type, 0); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_CreateWowService_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_CreateWowService_handle); + + return offset; +} + +static int +svcctl_dissect_element_CreateWowService_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_CreateWowService_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_CreateWowService( */ +/* IDL: [in] [ref] policy_handle *scm_handle, */ +/* IDL: [charset(UTF16)] [in] uint16 ServiceName[*], */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *DisplayName, */ +/* IDL: [in] uint32 desired_access, */ +/* IDL: [in] uint32 service_type, */ +/* IDL: [in] svcctl_StartType start_type, */ +/* IDL: [in] svcctl_ErrorControl error_control, */ +/* IDL: [charset(UTF16)] [in] uint16 binary_path[*], */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *LoadOrderGroupKey, */ +/* IDL: [in] [out] [unique(1)] uint32 *tag_id, */ +/* IDL: [in] [size_is(dependencies_size)] [unique(1)] uint8 *dependencies, */ +/* IDL: [in] uint32 dependencies_size, */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *service_start_name, */ +/* IDL: [in] [size_is(password_size)] [unique(1)] uint8 *password, */ +/* IDL: [in] uint32 password_size, */ +/* IDL: [in] uint16 service_wow_type, */ +/* IDL: [out] [ref] policy_handle *handle */ +/* IDL: ); */ + +static int +svcctl_dissect_CreateWowService_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="CreateWowService"; + offset = svcctl_dissect_element_CreateWowService_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = svcctl_dissect_element_CreateWowService_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_CreateWowService_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CreateWowService"; + offset = svcctl_dissect_element_CreateWowService_scm_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_ServiceName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_DisplayName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_desired_access(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_service_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_start_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_error_control(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_binary_path(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_LoadOrderGroupKey(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_tag_id(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_dependencies(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_dependencies_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_service_start_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_password(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_password_size(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_CreateWowService_service_wow_type(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +/* IDL: WERROR svcctl_GetServiceRegistryStateKey( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceRegistryStateKey_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceRegistryStateKey"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceRegistryStateKey_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceRegistryStateKey"; + return offset; +} + +/* IDL: WERROR svcctl_GetServiceDirectory( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceDirectory_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceDirectory"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceDirectory_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceDirectory"; + return offset; +} + +/* IDL: WERROR svcctl_GetServiceProcessToken( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_GetServiceProcessToken_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetServiceProcessToken"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetServiceProcessToken_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetServiceProcessToken"; + return offset; +} + +static int +svcctl_dissect_element_OpenSCManager2_database_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManager2_database_name_, NDR_POINTER_UNIQUE, "Pointer to Database Name (uint16)",hf_svcctl_svcctl_OpenSCManager2_database_name); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManager2_database_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_svcctl_svcctl_OpenSCManager2_database_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManager2_desired_access(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenSCManager2_desired_access, 0); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManager2_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, svcctl_dissect_element_OpenSCManager2_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_svcctl_svcctl_OpenSCManager2_handle); + + return offset; +} + +static int +svcctl_dissect_element_OpenSCManager2_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_OpenSCManager2_handle, 0); + + return offset; +} + +/* IDL: WERROR svcctl_OpenSCManager2( */ +/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *database_name, */ +/* IDL: [in] uint32 desired_access, */ +/* IDL: [out] [ref] policy_handle *handle */ +/* IDL: ); */ + +static int +svcctl_dissect_OpenSCManager2_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="OpenSCManager2"; + offset = svcctl_dissect_element_OpenSCManager2_handle(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_OpenSCManager2_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="OpenSCManager2"; + offset = svcctl_dissect_element_OpenSCManager2_database_name(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = svcctl_dissect_element_OpenSCManager2_desired_access(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +/* IDL: WERROR svcctl_GetSharedServiceRegistryStateKey( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_GetSharedServiceRegistryStateKey_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetSharedServiceRegistryStateKey"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetSharedServiceRegistryStateKey_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetSharedServiceRegistryStateKey"; + return offset; +} + +/* IDL: WERROR svcctl_GetSharedServiceDirectory( */ +/* IDL: */ +/* IDL: ); */ + +static int +svcctl_dissect_GetSharedServiceDirectory_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint32 status; + + di->dcerpc_procedure_name="GetSharedServiceDirectory"; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +static int +svcctl_dissect_GetSharedServiceDirectory_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetSharedServiceDirectory"; + return offset; +} + + +static dcerpc_sub_dissector svcctl_dissectors[] = { + { 0, "CloseServiceHandle", + svcctl_dissect_CloseServiceHandle_request, svcctl_dissect_CloseServiceHandle_response}, + { 1, "ControlService", + svcctl_dissect_ControlService_request, svcctl_dissect_ControlService_response}, + { 2, "DeleteService", + svcctl_dissect_DeleteService_request, svcctl_dissect_DeleteService_response}, + { 3, "LockServiceDatabase", + svcctl_dissect_LockServiceDatabase_request, svcctl_dissect_LockServiceDatabase_response}, + { 4, "QueryServiceObjectSecurity", + svcctl_dissect_QueryServiceObjectSecurity_request, svcctl_dissect_QueryServiceObjectSecurity_response}, + { 5, "SetServiceObjectSecurity", + svcctl_dissect_SetServiceObjectSecurity_request, svcctl_dissect_SetServiceObjectSecurity_response}, + { 6, "QueryServiceStatus", + svcctl_dissect_QueryServiceStatus_request, svcctl_dissect_QueryServiceStatus_response}, + { 7, "SetServiceStatus", + svcctl_dissect_SetServiceStatus_request, svcctl_dissect_SetServiceStatus_response}, + { 8, "UnlockServiceDatabase", + svcctl_dissect_UnlockServiceDatabase_request, svcctl_dissect_UnlockServiceDatabase_response}, + { 9, "NotifyBootConfigStatus", + svcctl_dissect_NotifyBootConfigStatus_request, svcctl_dissect_NotifyBootConfigStatus_response}, + { 10, "SCSetServiceBitsW", + svcctl_dissect_SCSetServiceBitsW_request, svcctl_dissect_SCSetServiceBitsW_response}, + { 11, "ChangeServiceConfigW", + svcctl_dissect_ChangeServiceConfigW_request, svcctl_dissect_ChangeServiceConfigW_response}, + { 12, "CreateServiceW", + svcctl_dissect_CreateServiceW_request, svcctl_dissect_CreateServiceW_response}, + { 13, "EnumDependentServicesW", + svcctl_dissect_EnumDependentServicesW_request, svcctl_dissect_EnumDependentServicesW_response}, + { 14, "EnumServicesStatusW", + svcctl_dissect_EnumServicesStatusW_request, svcctl_dissect_EnumServicesStatusW_response}, + { 15, "OpenSCManagerW", + svcctl_dissect_OpenSCManagerW_request, svcctl_dissect_OpenSCManagerW_response}, + { 16, "OpenServiceW", + svcctl_dissect_OpenServiceW_request, svcctl_dissect_OpenServiceW_response}, + { 17, "QueryServiceConfigW", + svcctl_dissect_QueryServiceConfigW_request, svcctl_dissect_QueryServiceConfigW_response}, + { 18, "QueryServiceLockStatusW", + svcctl_dissect_QueryServiceLockStatusW_request, svcctl_dissect_QueryServiceLockStatusW_response}, + { 19, "StartServiceW", + svcctl_dissect_StartServiceW_request, svcctl_dissect_StartServiceW_response}, + { 20, "GetServiceDisplayNameW", + svcctl_dissect_GetServiceDisplayNameW_request, svcctl_dissect_GetServiceDisplayNameW_response}, + { 21, "GetServiceKeyNameW", + svcctl_dissect_GetServiceKeyNameW_request, svcctl_dissect_GetServiceKeyNameW_response}, + { 22, "SCSetServiceBitsA", + svcctl_dissect_SCSetServiceBitsA_request, svcctl_dissect_SCSetServiceBitsA_response}, + { 23, "ChangeServiceConfigA", + svcctl_dissect_ChangeServiceConfigA_request, svcctl_dissect_ChangeServiceConfigA_response}, + { 24, "CreateServiceA", + svcctl_dissect_CreateServiceA_request, svcctl_dissect_CreateServiceA_response}, + { 25, "EnumDependentServicesA", + svcctl_dissect_EnumDependentServicesA_request, svcctl_dissect_EnumDependentServicesA_response}, + { 26, "EnumServicesStatusA", + svcctl_dissect_EnumServicesStatusA_request, svcctl_dissect_EnumServicesStatusA_response}, + { 27, "OpenSCManagerA", + svcctl_dissect_OpenSCManagerA_request, svcctl_dissect_OpenSCManagerA_response}, + { 28, "OpenServiceA", + svcctl_dissect_OpenServiceA_request, svcctl_dissect_OpenServiceA_response}, + { 29, "QueryServiceConfigA", + svcctl_dissect_QueryServiceConfigA_request, svcctl_dissect_QueryServiceConfigA_response}, + { 30, "QueryServiceLockStatusA", + svcctl_dissect_QueryServiceLockStatusA_request, svcctl_dissect_QueryServiceLockStatusA_response}, + { 31, "StartServiceA", + svcctl_dissect_StartServiceA_request, svcctl_dissect_StartServiceA_response}, + { 32, "GetServiceDisplayNameA", + svcctl_dissect_GetServiceDisplayNameA_request, svcctl_dissect_GetServiceDisplayNameA_response}, + { 33, "GetServiceKeyNameA", + svcctl_dissect_GetServiceKeyNameA_request, svcctl_dissect_GetServiceKeyNameA_response}, + { 34, "GetCurrentGroupeStateW", + svcctl_dissect_GetCurrentGroupeStateW_request, svcctl_dissect_GetCurrentGroupeStateW_response}, + { 35, "EnumServiceGroupW", + svcctl_dissect_EnumServiceGroupW_request, svcctl_dissect_EnumServiceGroupW_response}, + { 36, "ChangeServiceConfig2A", + svcctl_dissect_ChangeServiceConfig2A_request, svcctl_dissect_ChangeServiceConfig2A_response}, + { 37, "ChangeServiceConfig2W", + svcctl_dissect_ChangeServiceConfig2W_request, svcctl_dissect_ChangeServiceConfig2W_response}, + { 38, "QueryServiceConfig2A", + svcctl_dissect_QueryServiceConfig2A_request, svcctl_dissect_QueryServiceConfig2A_response}, + { 39, "QueryServiceConfig2W", + svcctl_dissect_QueryServiceConfig2W_request, svcctl_dissect_QueryServiceConfig2W_response}, + { 40, "QueryServiceStatusEx", + svcctl_dissect_QueryServiceStatusEx_request, svcctl_dissect_QueryServiceStatusEx_response}, + { 41, "EnumServicesStatusExA", + svcctl_dissect_EnumServicesStatusExA_request, svcctl_dissect_EnumServicesStatusExA_response}, + { 42, "EnumServicesStatusExW", + svcctl_dissect_EnumServicesStatusExW_request, svcctl_dissect_EnumServicesStatusExW_response}, + { 43, "ScBroadcastServiceControlMessage", + svcctl_dissect_ScBroadcastServiceControlMessage_request, svcctl_dissect_ScBroadcastServiceControlMessage_response}, + { 44, "CreateServiceWOW64A", + svcctl_dissect_CreateServiceWOW64A_request, svcctl_dissect_CreateServiceWOW64A_response}, + { 45, "CreateServiceWOW64W", + svcctl_dissect_CreateServiceWOW64W_request, svcctl_dissect_CreateServiceWOW64W_response}, + { 46, "ScQueryServiceTagInfo", + svcctl_dissect_ScQueryServiceTagInfo_request, svcctl_dissect_ScQueryServiceTagInfo_response}, + { 47, "NotifyServiceStatusChange", + svcctl_dissect_NotifyServiceStatusChange_request, svcctl_dissect_NotifyServiceStatusChange_response}, + { 48, "GetNotifyResults", + svcctl_dissect_GetNotifyResults_request, svcctl_dissect_GetNotifyResults_response}, + { 49, "CloseNotifyHandle", + svcctl_dissect_CloseNotifyHandle_request, svcctl_dissect_CloseNotifyHandle_response}, + { 50, "ControlServiceExA", + svcctl_dissect_ControlServiceExA_request, svcctl_dissect_ControlServiceExA_response}, + { 51, "ControlServiceExW", + svcctl_dissect_ControlServiceExW_request, svcctl_dissect_ControlServiceExW_response}, + { 52, "ScSendPnPMessage", + svcctl_dissect_ScSendPnPMessage_request, svcctl_dissect_ScSendPnPMessage_response}, + { 53, "ScValidatePnPService", + svcctl_dissect_ScValidatePnPService_request, svcctl_dissect_ScValidatePnPService_response}, + { 54, "ScOpenServiceStatusHandle", + svcctl_dissect_ScOpenServiceStatusHandle_request, svcctl_dissect_ScOpenServiceStatusHandle_response}, + { 55, "ScQueryServiceConfig", + svcctl_dissect_ScQueryServiceConfig_request, svcctl_dissect_ScQueryServiceConfig_response}, + { 56, "QueryServiceConfigEx", + svcctl_dissect_QueryServiceConfigEx_request, svcctl_dissect_QueryServiceConfigEx_response}, + { 57, "ScRegisterPreshutdownRestart", + svcctl_dissect_ScRegisterPreshutdownRestart_request, svcctl_dissect_ScRegisterPreshutdownRestart_response}, + { 58, "ScReparseServiceDatabase", + svcctl_dissect_ScReparseServiceDatabase_request, svcctl_dissect_ScReparseServiceDatabase_response}, + { 59, "QueryUserServiceName", + svcctl_dissect_QueryUserServiceName_request, svcctl_dissect_QueryUserServiceName_response}, + { 60, "CreateWowService", + svcctl_dissect_CreateWowService_request, svcctl_dissect_CreateWowService_response}, + { 61, "GetServiceRegistryStateKey", + svcctl_dissect_GetServiceRegistryStateKey_request, svcctl_dissect_GetServiceRegistryStateKey_response}, + { 62, "GetServiceDirectory", + svcctl_dissect_GetServiceDirectory_request, svcctl_dissect_GetServiceDirectory_response}, + { 63, "GetServiceProcessToken", + svcctl_dissect_GetServiceProcessToken_request, svcctl_dissect_GetServiceProcessToken_response}, + { 64, "OpenSCManager2", + svcctl_dissect_OpenSCManager2_request, svcctl_dissect_OpenSCManager2_response}, + { 65, "GetSharedServiceRegistryStateKey", + svcctl_dissect_GetSharedServiceRegistryStateKey_request, svcctl_dissect_GetSharedServiceRegistryStateKey_response}, + { 66, "GetSharedServiceDirectory", + svcctl_dissect_GetSharedServiceDirectory_request, svcctl_dissect_GetSharedServiceDirectory_response}, + { 0, NULL, NULL, NULL } +}; + +void proto_register_dcerpc_svcctl(void) +{ + static hf_register_info hf[] = { + { &hf_svcctl_ENUM_SERVICE_STATUSA_display_name, + { "Display Name", "svcctl.ENUM_SERVICE_STATUSA.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_ENUM_SERVICE_STATUSA_service_name, + { "Service Name", "svcctl.ENUM_SERVICE_STATUSA.service_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_ENUM_SERVICE_STATUSA_status, + { "Status", "svcctl.ENUM_SERVICE_STATUSA.status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_ENUM_SERVICE_STATUSW_display_name, + { "Display Name", "svcctl.ENUM_SERVICE_STATUSW.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_ENUM_SERVICE_STATUSW_service_name, + { "Service Name", "svcctl.ENUM_SERVICE_STATUSW.service_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_ENUM_SERVICE_STATUSW_status, + { "Status", "svcctl.ENUM_SERVICE_STATUSW.status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_group_name, + { "Group Name", "svcctl.EnumServicesStatusExA.group_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_info_level, + { "Info Level", "svcctl.EnumServicesStatusExA.info_level", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_needed, + { "Needed", "svcctl.EnumServicesStatusExA.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_offered, + { "Offered", "svcctl.EnumServicesStatusExA.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_resume_handle, + { "Resume Handle", "svcctl.EnumServicesStatusExA.resume_handle", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_scm_handle, + { "Scm Handle", "svcctl.EnumServicesStatusExA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_service_returned, + { "Service Returned", "svcctl.EnumServicesStatusExA.service_returned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_service_type, + { "Service Type", "svcctl.EnumServicesStatusExA.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_services, + { "Services", "svcctl.EnumServicesStatusExA.services", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExA_state, + { "State", "svcctl.EnumServicesStatusExA.state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_group_name, + { "Group Name", "svcctl.EnumServicesStatusExW.group_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_info_level, + { "Info Level", "svcctl.EnumServicesStatusExW.info_level", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_needed, + { "Needed", "svcctl.EnumServicesStatusExW.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_offered, + { "Offered", "svcctl.EnumServicesStatusExW.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_resume_handle, + { "Resume Handle", "svcctl.EnumServicesStatusExW.resume_handle", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_scmanager, + { "Scmanager", "svcctl.EnumServicesStatusExW.scmanager", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_service_returned, + { "Service Returned", "svcctl.EnumServicesStatusExW.service_returned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_service_type, + { "Service Type", "svcctl.EnumServicesStatusExW.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_services, + { "Services", "svcctl.EnumServicesStatusExW.services", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_EnumServicesStatusExW_state, + { "State", "svcctl.EnumServicesStatusExW.state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_dependencies, + { "Dependencies", "svcctl.QUERY_SERVICE_CONFIG.dependencies", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_displayname, + { "Displayname", "svcctl.QUERY_SERVICE_CONFIG.displayname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_error_control, + { "Error Control", "svcctl.QUERY_SERVICE_CONFIG.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_executablepath, + { "Executablepath", "svcctl.QUERY_SERVICE_CONFIG.executablepath", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_loadordergroup, + { "Loadordergroup", "svcctl.QUERY_SERVICE_CONFIG.loadordergroup", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_service_type, + { "Service Type", "svcctl.QUERY_SERVICE_CONFIG.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_start_type, + { "Start Type", "svcctl.QUERY_SERVICE_CONFIG.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_startname, + { "Startname", "svcctl.QUERY_SERVICE_CONFIG.startname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_QUERY_SERVICE_CONFIG_tag_id, + { "Tag Id", "svcctl.QUERY_SERVICE_CONFIG.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_LOCK_STATUS_is_locked, + { "Is Locked", "svcctl.SERVICE_LOCK_STATUS.is_locked", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_LOCK_STATUS_lock_duration, + { "Lock Duration", "svcctl.SERVICE_LOCK_STATUS.lock_duration", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_LOCK_STATUS_lock_owner, + { "Lock Owner", "svcctl.SERVICE_LOCK_STATUS.lock_owner", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_check_point, + { "Check Point", "svcctl.SERVICE_STATUS_PROCESS.check_point", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_controls_accepted, + { "Controls Accepted", "svcctl.SERVICE_STATUS_PROCESS.controls_accepted", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_process_id, + { "Process Id", "svcctl.SERVICE_STATUS_PROCESS.process_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_service_exit_code, + { "Service Exit Code", "svcctl.SERVICE_STATUS_PROCESS.service_exit_code", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_service_flags, + { "Service Flags", "svcctl.SERVICE_STATUS_PROCESS.service_flags", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceFlags_vals), 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_state, + { "State", "svcctl.SERVICE_STATUS_PROCESS.state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceStatus_vals), 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_type, + { "Type", "svcctl.SERVICE_STATUS_PROCESS.type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_wait_hint, + { "Wait Hint", "svcctl.SERVICE_STATUS_PROCESS.wait_hint", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_PROCESS_win32_exit_code, + { "Win32 Exit Code", "svcctl.SERVICE_STATUS_PROCESS.win32_exit_code", FT_UINT32, BASE_DEC, VALS(WERR_errors), 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_check_point, + { "Check Point", "svcctl.SERVICE_STATUS.check_point", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_controls_accepted, + { "Controls Accepted", "svcctl.SERVICE_STATUS.controls_accepted", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_service_exit_code, + { "Service Exit Code", "svcctl.SERVICE_STATUS.service_exit_code", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_state, + { "State", "svcctl.SERVICE_STATUS.state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceStatus_vals), 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_type, + { "Type", "svcctl.SERVICE_STATUS.type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_wait_hint, + { "Wait Hint", "svcctl.SERVICE_STATUS.wait_hint", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_SERVICE_STATUS_win32_exit_code, + { "Win32 Exit Code", "svcctl.SERVICE_STATUS.win32_exit_code", FT_UINT32, BASE_DEC, VALS(WERR_errors), 0, NULL, HFILL }}, + { &hf_svcctl_opnum, + { "Operation", "svcctl.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_service_buffer_size, + { "Buffer Size", "svcctl.services.buffer_size", FT_UINT32, BASE_DEC, NULL, 0, "NULL", HFILL }}, + { &hf_svcctl_service_referent_id, + { "Referent ID(offset)", "svcctl.ENUM_SERVICE_STATUSW.referent_id", FT_UINT32, BASE_DEC, NULL, 0, "NULL", HFILL }}, + { &hf_svcctl_svcctl_ArgumentStringA_string, + { "String", "svcctl.svcctl_ArgumentStringA.string", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ArgumentString_string, + { "String", "svcctl.svcctl_ArgumentString.string", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfig2A_info, + { "Info", "svcctl.svcctl_ChangeServiceConfig2A.info", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfig2A_info_level, + { "Info Level", "svcctl.svcctl_ChangeServiceConfig2A.info_level", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfig2A_service_handle, + { "Service Handle", "svcctl.svcctl_ChangeServiceConfig2A.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfig2W_handle, + { "Handle", "svcctl.svcctl_ChangeServiceConfig2W.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfig2W_info, + { "Info", "svcctl.svcctl_ChangeServiceConfig2W.info", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfig2W_info_level, + { "Info Level", "svcctl.svcctl_ChangeServiceConfig2W.info_level", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_binary_path, + { "Binary Path", "svcctl.svcctl_ChangeServiceConfigA.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_dependencies, + { "Dependencies", "svcctl.svcctl_ChangeServiceConfigA.dependencies", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_display_name, + { "Display Name", "svcctl.svcctl_ChangeServiceConfigA.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_error_control, + { "Error Control", "svcctl.svcctl_ChangeServiceConfigA.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_load_order_group, + { "Load Order Group", "svcctl.svcctl_ChangeServiceConfigA.load_order_group", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_password, + { "Password", "svcctl.svcctl_ChangeServiceConfigA.password", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_service_handle, + { "Service Handle", "svcctl.svcctl_ChangeServiceConfigA.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_service_start_name, + { "Service Start Name", "svcctl.svcctl_ChangeServiceConfigA.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_service_type, + { "Service Type", "svcctl.svcctl_ChangeServiceConfigA.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_start_type, + { "Start Type", "svcctl.svcctl_ChangeServiceConfigA.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigA_tag_id, + { "Tag Id", "svcctl.svcctl_ChangeServiceConfigA.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_binary_path, + { "Binary Path", "svcctl.svcctl_ChangeServiceConfigW.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_dependencies, + { "Dependencies", "svcctl.svcctl_ChangeServiceConfigW.dependencies", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_display_name, + { "Display Name", "svcctl.svcctl_ChangeServiceConfigW.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_dwDependSize, + { "DwDependSize", "svcctl.svcctl_ChangeServiceConfigW.dwDependSize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_dwPwSize, + { "DwPwSize", "svcctl.svcctl_ChangeServiceConfigW.dwPwSize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_error_control, + { "Error Control", "svcctl.svcctl_ChangeServiceConfigW.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_load_order_group, + { "Load Order Group", "svcctl.svcctl_ChangeServiceConfigW.load_order_group", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_password, + { "Password", "svcctl.svcctl_ChangeServiceConfigW.password", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_service_handle, + { "Service Handle", "svcctl.svcctl_ChangeServiceConfigW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_service_start_name, + { "Service Start Name", "svcctl.svcctl_ChangeServiceConfigW.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_service_type, + { "Service Type", "svcctl.svcctl_ChangeServiceConfigW.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_start_type, + { "Start Type", "svcctl.svcctl_ChangeServiceConfigW.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ChangeServiceConfigW_tag_id, + { "Tag Id", "svcctl.svcctl_ChangeServiceConfigW.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CloseServiceHandle_object_handle, + { "Object Handle", "svcctl.svcctl_CloseServiceHandle.object_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlService_control, + { "Control", "svcctl.svcctl_ControlService.control", FT_UINT32, BASE_DEC, VALS(svcctl_SERVICE_CONTROL_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlService_service_handle, + { "Service Handle", "svcctl.svcctl_ControlService.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlService_service_status, + { "Service Status", "svcctl.svcctl_ControlService.service_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_HARDWAREPROFILECHANGE, + { "SERVICE ACCEPT HARDWAREPROFILECHANGE", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_HARDWAREPROFILECHANGE", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_HARDWAREPROFILECHANGE_tfs), ( 0x00000020 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_NETBINDCHANGE, + { "SERVICE ACCEPT NETBINDCHANGE", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_NETBINDCHANGE", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_NETBINDCHANGE_tfs), ( 0x00000010 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PARAMCHANGE, + { "SERVICE ACCEPT PARAMCHANGE", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_PARAMCHANGE", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_PARAMCHANGE_tfs), ( 0x00000008 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PAUSE_CONTINUE, + { "SERVICE ACCEPT PAUSE CONTINUE", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_PAUSE_CONTINUE", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_PAUSE_CONTINUE_tfs), ( 0x00000002 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_POWEREVENT, + { "SERVICE ACCEPT POWEREVENT", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_POWEREVENT", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_POWEREVENT_tfs), ( 0x00000040 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_PRESHUTDOWN, + { "SERVICE ACCEPT PRESHUTDOWN", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_PRESHUTDOWN", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_PRESHUTDOWN_tfs), ( 0x00000100 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_SESSIONCHANGE, + { "SERVICE ACCEPT SESSIONCHANGE", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_SESSIONCHANGE", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_SESSIONCHANGE_tfs), ( 0x00000080 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_SHUTDOWN, + { "SERVICE ACCEPT SHUTDOWN", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_SHUTDOWN", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_SHUTDOWN_tfs), ( 0x00000004 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_STOP, + { "SERVICE ACCEPT STOP", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_STOP", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_STOP_tfs), ( 0x00000001 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_TIMECHANGE, + { "SERVICE ACCEPT TIMECHANGE", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_TIMECHANGE", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_TIMECHANGE_tfs), ( 0x00000200 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_TRIGGEREVENT, + { "SERVICE ACCEPT TRIGGEREVENT", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_TRIGGEREVENT", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_TRIGGEREVENT_tfs), ( 0x00000400 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ControlsAccepted_SERVICE_ACCEPT_USERMODEREBOOT, + { "SERVICE ACCEPT USERMODEREBOOT", "svcctl.svcctl_ControlsAccepted.SERVICE_ACCEPT_USERMODEREBOOT", FT_BOOLEAN, 32, TFS(&svcctl_ControlsAccepted_SERVICE_ACCEPT_USERMODEREBOOT_tfs), ( 0x00000800 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_DisplayName, + { "DisplayName", "svcctl.svcctl_CreateServiceA.DisplayName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_LoadOrderGroupKey, + { "LoadOrderGroupKey", "svcctl.svcctl_CreateServiceA.LoadOrderGroupKey", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_ServiceName, + { "ServiceName", "svcctl.svcctl_CreateServiceA.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_binary_path, + { "Binary Path", "svcctl.svcctl_CreateServiceA.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_dependencies, + { "Dependencies", "svcctl.svcctl_CreateServiceA.dependencies", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_dependencies_size, + { "Dependencies Size", "svcctl.svcctl_CreateServiceA.dependencies_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_desired_access, + { "Desired Access", "svcctl.svcctl_CreateServiceA.desired_access", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_error_control, + { "Error Control", "svcctl.svcctl_CreateServiceA.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_password, + { "Password", "svcctl.svcctl_CreateServiceA.password", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_password_size, + { "Password Size", "svcctl.svcctl_CreateServiceA.password_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_scm_handle, + { "Scm Handle", "svcctl.svcctl_CreateServiceA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_service_handle, + { "Service Handle", "svcctl.svcctl_CreateServiceA.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_service_start_name, + { "Service Start Name", "svcctl.svcctl_CreateServiceA.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_service_type, + { "Service Type", "svcctl.svcctl_CreateServiceA.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_start_type, + { "Start Type", "svcctl.svcctl_CreateServiceA.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceA_tag_id, + { "Tag Id", "svcctl.svcctl_CreateServiceA.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_DisplayName, + { "DisplayName", "svcctl.svcctl_CreateServiceWOW64A.DisplayName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_LoadOrderGroupKey, + { "LoadOrderGroupKey", "svcctl.svcctl_CreateServiceWOW64A.LoadOrderGroupKey", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_ServiceName, + { "ServiceName", "svcctl.svcctl_CreateServiceWOW64A.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_binary_path, + { "Binary Path", "svcctl.svcctl_CreateServiceWOW64A.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_dependencies, + { "Dependencies", "svcctl.svcctl_CreateServiceWOW64A.dependencies", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_dependencies_size, + { "Dependencies Size", "svcctl.svcctl_CreateServiceWOW64A.dependencies_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_desired_access, + { "Desired Access", "svcctl.svcctl_CreateServiceWOW64A.desired_access", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_error_control, + { "Error Control", "svcctl.svcctl_CreateServiceWOW64A.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_handle, + { "Handle", "svcctl.svcctl_CreateServiceWOW64A.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_password, + { "Password", "svcctl.svcctl_CreateServiceWOW64A.password", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_password_size, + { "Password Size", "svcctl.svcctl_CreateServiceWOW64A.password_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_scm_handle, + { "Scm Handle", "svcctl.svcctl_CreateServiceWOW64A.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_service_start_name, + { "Service Start Name", "svcctl.svcctl_CreateServiceWOW64A.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_service_type, + { "Service Type", "svcctl.svcctl_CreateServiceWOW64A.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_start_type, + { "Start Type", "svcctl.svcctl_CreateServiceWOW64A.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64A_tag_id, + { "Tag Id", "svcctl.svcctl_CreateServiceWOW64A.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_DisplayName, + { "DisplayName", "svcctl.svcctl_CreateServiceWOW64W.DisplayName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_LoadOrderGroupKey, + { "LoadOrderGroupKey", "svcctl.svcctl_CreateServiceWOW64W.LoadOrderGroupKey", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_ServiceName, + { "ServiceName", "svcctl.svcctl_CreateServiceWOW64W.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_binary_path, + { "Binary Path", "svcctl.svcctl_CreateServiceWOW64W.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_dependencies, + { "Dependencies", "svcctl.svcctl_CreateServiceWOW64W.dependencies", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_dependencies_size, + { "Dependencies Size", "svcctl.svcctl_CreateServiceWOW64W.dependencies_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_desired_access, + { "Desired Access", "svcctl.svcctl_CreateServiceWOW64W.desired_access", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_error_control, + { "Error Control", "svcctl.svcctl_CreateServiceWOW64W.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_handle, + { "Handle", "svcctl.svcctl_CreateServiceWOW64W.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_password, + { "Password", "svcctl.svcctl_CreateServiceWOW64W.password", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_password_size, + { "Password Size", "svcctl.svcctl_CreateServiceWOW64W.password_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_scm_handle, + { "Scm Handle", "svcctl.svcctl_CreateServiceWOW64W.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_service_start_name, + { "Service Start Name", "svcctl.svcctl_CreateServiceWOW64W.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_service_type, + { "Service Type", "svcctl.svcctl_CreateServiceWOW64W.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_start_type, + { "Start Type", "svcctl.svcctl_CreateServiceWOW64W.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceWOW64W_tag_id, + { "Tag Id", "svcctl.svcctl_CreateServiceWOW64W.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_DisplayName, + { "DisplayName", "svcctl.svcctl_CreateServiceW.DisplayName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_LoadOrderGroup, + { "LoadOrderGroup", "svcctl.svcctl_CreateServiceW.LoadOrderGroup", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_ServiceName, + { "ServiceName", "svcctl.svcctl_CreateServiceW.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_binary_path, + { "Binary Path", "svcctl.svcctl_CreateServiceW.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_dependencies, + { "Dependencies", "svcctl.svcctl_CreateServiceW.dependencies", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_dependencies_size, + { "Dependencies Size", "svcctl.svcctl_CreateServiceW.dependencies_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_desired_access, + { "Desired Access", "svcctl.svcctl_CreateServiceW.desired_access", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_error_control, + { "Error Control", "svcctl.svcctl_CreateServiceW.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_password, + { "Password", "svcctl.svcctl_CreateServiceW.password", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_password_size, + { "Password Size", "svcctl.svcctl_CreateServiceW.password_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_scm_handle, + { "Scm Handle", "svcctl.svcctl_CreateServiceW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_service_handle, + { "Service Handle", "svcctl.svcctl_CreateServiceW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_service_start_name, + { "Service Start Name", "svcctl.svcctl_CreateServiceW.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_service_type, + { "Service Type", "svcctl.svcctl_CreateServiceW.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_start_type, + { "Start Type", "svcctl.svcctl_CreateServiceW.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateServiceW_tag_id, + { "Tag Id", "svcctl.svcctl_CreateServiceW.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_DisplayName, + { "DisplayName", "svcctl.svcctl_CreateWowService.DisplayName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_LoadOrderGroupKey, + { "LoadOrderGroupKey", "svcctl.svcctl_CreateWowService.LoadOrderGroupKey", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_ServiceName, + { "ServiceName", "svcctl.svcctl_CreateWowService.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_binary_path, + { "Binary Path", "svcctl.svcctl_CreateWowService.binary_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_dependencies, + { "Dependencies", "svcctl.svcctl_CreateWowService.dependencies", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_dependencies_size, + { "Dependencies Size", "svcctl.svcctl_CreateWowService.dependencies_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_desired_access, + { "Desired Access", "svcctl.svcctl_CreateWowService.desired_access", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_error_control, + { "Error Control", "svcctl.svcctl_CreateWowService.error_control", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ErrorControl_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_handle, + { "Handle", "svcctl.svcctl_CreateWowService.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_password, + { "Password", "svcctl.svcctl_CreateWowService.password", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_password_size, + { "Password Size", "svcctl.svcctl_CreateWowService.password_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_scm_handle, + { "Scm Handle", "svcctl.svcctl_CreateWowService.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_service_start_name, + { "Service Start Name", "svcctl.svcctl_CreateWowService.service_start_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_service_type, + { "Service Type", "svcctl.svcctl_CreateWowService.service_type", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_service_wow_type, + { "Service Wow Type", "svcctl.svcctl_CreateWowService.service_wow_type", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_start_type, + { "Start Type", "svcctl.svcctl_CreateWowService.start_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StartType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_CreateWowService_tag_id, + { "Tag Id", "svcctl.svcctl_CreateWowService.tag_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_DeleteService_service_handle, + { "Service Handle", "svcctl.svcctl_DeleteService.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesA_needed, + { "Needed", "svcctl.svcctl_EnumDependentServicesA.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesA_offered, + { "Offered", "svcctl.svcctl_EnumDependentServicesA.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesA_service_handle, + { "Service Handle", "svcctl.svcctl_EnumDependentServicesA.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesA_service_status, + { "Service Status", "svcctl.svcctl_EnumDependentServicesA.service_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesA_services_returned, + { "Services Returned", "svcctl.svcctl_EnumDependentServicesA.services_returned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesA_state, + { "State", "svcctl.svcctl_EnumDependentServicesA.state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesW_bytesneeded, + { "Bytesneeded", "svcctl.svcctl_EnumDependentServicesW.bytesneeded", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesW_offered, + { "Offered", "svcctl.svcctl_EnumDependentServicesW.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesW_service_handle, + { "Service Handle", "svcctl.svcctl_EnumDependentServicesW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesW_service_state, + { "Service State", "svcctl.svcctl_EnumDependentServicesW.service_state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesW_service_status, + { "Service Status", "svcctl.svcctl_EnumDependentServicesW.service_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumDependentServicesW_services_returned, + { "Services Returned", "svcctl.svcctl_EnumDependentServicesW.services_returned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_ResumeIndex, + { "ResumeIndex", "svcctl.svcctl_EnumServiceGroupW.ResumeIndex", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_cbBufSize, + { "CbBufSize", "svcctl.svcctl_EnumServiceGroupW.cbBufSize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_lpBuffer, + { "LpBuffer", "svcctl.svcctl_EnumServiceGroupW.lpBuffer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_lpServicesReturned, + { "LpServicesReturned", "svcctl.svcctl_EnumServiceGroupW.lpServicesReturned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_pcbBytesNeeded, + { "PcbBytesNeeded", "svcctl.svcctl_EnumServiceGroupW.pcbBytesNeeded", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_pszGroupName, + { "PszGroupName", "svcctl.svcctl_EnumServiceGroupW.pszGroupName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_scm_handle, + { "Scm Handle", "svcctl.svcctl_EnumServiceGroupW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_service_state, + { "Service State", "svcctl.svcctl_EnumServiceGroupW.service_state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServiceGroupW_service_type, + { "Service Type", "svcctl.svcctl_EnumServiceGroupW.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_needed, + { "Needed", "svcctl.svcctl_EnumServicesStatusA.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_offered, + { "Offered", "svcctl.svcctl_EnumServicesStatusA.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_resume_handle, + { "Resume Handle", "svcctl.svcctl_EnumServicesStatusA.resume_handle", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_scm_handle, + { "Scm Handle", "svcctl.svcctl_EnumServicesStatusA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_service, + { "Service", "svcctl.svcctl_EnumServicesStatusA.service", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_service_state, + { "Service State", "svcctl.svcctl_EnumServicesStatusA.service_state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_service_type, + { "Service Type", "svcctl.svcctl_EnumServicesStatusA.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusA_services_returned, + { "Services Returned", "svcctl.svcctl_EnumServicesStatusA.services_returned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_bytes_needed, + { "Bytes Needed", "svcctl.svcctl_EnumServicesStatusW.bytes_needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_offered, + { "Offered", "svcctl.svcctl_EnumServicesStatusW.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_resume_index, + { "Resume Index", "svcctl.svcctl_EnumServicesStatusW.resume_index", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_scm_handle, + { "Scm Handle", "svcctl.svcctl_EnumServicesStatusW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_service_state, + { "Service State", "svcctl.svcctl_EnumServicesStatusW.service_state", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceState_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_service_type, + { "Service Type", "svcctl.svcctl_EnumServicesStatusW.service_type", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ServiceType_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_services, + { "Services", "svcctl.svcctl_EnumServicesStatusW.services", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_EnumServicesStatusW_services_returned, + { "Services Returned", "svcctl.svcctl_EnumServicesStatusW.services_returned", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetCurrentGroupeStateW_handle, + { "Handle", "svcctl.svcctl_GetCurrentGroupeStateW.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetCurrentGroupeStateW_lpLoadOrderGroup, + { "LpLoadOrderGroup", "svcctl.svcctl_GetCurrentGroupeStateW.lpLoadOrderGroup", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetCurrentGroupeStateW_state, + { "State", "svcctl.svcctl_GetCurrentGroupeStateW.state", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameA_display_name, + { "Display Name", "svcctl.svcctl_GetServiceDisplayNameA.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameA_display_name_length, + { "Display Name Length", "svcctl.svcctl_GetServiceDisplayNameA.display_name_length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameA_handle, + { "Handle", "svcctl.svcctl_GetServiceDisplayNameA.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameA_service_name, + { "Service Name", "svcctl.svcctl_GetServiceDisplayNameA.service_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameW_display_name, + { "Display Name", "svcctl.svcctl_GetServiceDisplayNameW.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameW_display_name_length, + { "Display Name Length", "svcctl.svcctl_GetServiceDisplayNameW.display_name_length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameW_scm_handle, + { "Scm Handle", "svcctl.svcctl_GetServiceDisplayNameW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceDisplayNameW_service_name, + { "Service Name", "svcctl.svcctl_GetServiceDisplayNameW.service_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameA_display_name_length, + { "Display Name Length", "svcctl.svcctl_GetServiceKeyNameA.display_name_length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameA_key_name, + { "Key Name", "svcctl.svcctl_GetServiceKeyNameA.key_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameA_scm_handle, + { "Scm Handle", "svcctl.svcctl_GetServiceKeyNameA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameA_service_name, + { "Service Name", "svcctl.svcctl_GetServiceKeyNameA.service_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameW_display_name, + { "Display Name", "svcctl.svcctl_GetServiceKeyNameW.display_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameW_scm_handle, + { "Scm Handle", "svcctl.svcctl_GetServiceKeyNameW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameW_service_name, + { "Service Name", "svcctl.svcctl_GetServiceKeyNameW.service_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_GetServiceKeyNameW_service_name_length, + { "Service Name Length", "svcctl.svcctl_GetServiceKeyNameW.service_name_length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_LockServiceDatabase_lock_handle, + { "Lock Handle", "svcctl.svcctl_LockServiceDatabase.lock_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_LockServiceDatabase_scm_handle, + { "Scm Handle", "svcctl.svcctl_LockServiceDatabase.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_ALL_ACCESS, + { "SC RIGHT MGR ALL ACCESS", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_ALL_ACCESS", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_ALL_ACCESS_tfs), ( 0x000F003F ), NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_CONNECT, + { "SC RIGHT MGR CONNECT", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_CONNECT", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_CONNECT_tfs), ( 0x00000001 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_CREATE_SERVICE, + { "SC RIGHT MGR CREATE SERVICE", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_CREATE_SERVICE", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_CREATE_SERVICE_tfs), ( 0x00000002 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_ENUMERATE_SERVICE, + { "SC RIGHT MGR ENUMERATE SERVICE", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_ENUMERATE_SERVICE", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_ENUMERATE_SERVICE_tfs), ( 0x00000004 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_LOCK, + { "SC RIGHT MGR LOCK", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_LOCK", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_LOCK_tfs), ( 0x00000008 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_MODIFY_BOOT_CONFIG, + { "SC RIGHT MGR MODIFY BOOT CONFIG", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_MODIFY_BOOT_CONFIG", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_MODIFY_BOOT_CONFIG_tfs), ( 0x00000020 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_MgrAccessMask_SC_RIGHT_MGR_QUERY_LOCK_STATUS, + { "SC RIGHT MGR QUERY LOCK STATUS", "svcctl.svcctl_MgrAccessMask.SC_RIGHT_MGR_QUERY_LOCK_STATUS", FT_BOOLEAN, 32, TFS(&svcctl_MgrAccessMask_SC_RIGHT_MGR_QUERY_LOCK_STATUS_tfs), ( 0x00000010 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_NotifyBootConfigStatus_boot_acceptable, + { "Boot Acceptable", "svcctl.svcctl_NotifyBootConfigStatus.boot_acceptable", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_NotifyBootConfigStatus_machine_name, + { "Machine Name", "svcctl.svcctl_NotifyBootConfigStatus.machine_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManager2_database_name, + { "Database Name", "svcctl.svcctl_OpenSCManager2.database_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManager2_desired_access, + { "Desired Access", "svcctl.svcctl_OpenSCManager2.desired_access", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManager2_handle, + { "Handle", "svcctl.svcctl_OpenSCManager2.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerA_DatabaseName, + { "DatabaseName", "svcctl.svcctl_OpenSCManagerA.DatabaseName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerA_MachineName, + { "MachineName", "svcctl.svcctl_OpenSCManagerA.MachineName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerA_access_mask, + { "Access Mask", "svcctl.svcctl_OpenSCManagerA.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerA_scm_handle, + { "Scm Handle", "svcctl.svcctl_OpenSCManagerA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerW_DatabaseName, + { "DatabaseName", "svcctl.svcctl_OpenSCManagerW.DatabaseName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerW_MachineName, + { "MachineName", "svcctl.svcctl_OpenSCManagerW.MachineName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerW_access_mask, + { "Access Mask", "svcctl.svcctl_OpenSCManagerW.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenSCManagerW_scm_handle, + { "Scm Handle", "svcctl.svcctl_OpenSCManagerW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceA_ServiceName, + { "ServiceName", "svcctl.svcctl_OpenServiceA.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceA_access_mask, + { "Access Mask", "svcctl.svcctl_OpenServiceA.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceA_scm_handle, + { "Scm Handle", "svcctl.svcctl_OpenServiceA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceA_service_handle, + { "Service Handle", "svcctl.svcctl_OpenServiceA.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceW_ServiceName, + { "ServiceName", "svcctl.svcctl_OpenServiceW.ServiceName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceW_access_mask, + { "Access Mask", "svcctl.svcctl_OpenServiceW.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceW_scm_handle, + { "Scm Handle", "svcctl.svcctl_OpenServiceW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_OpenServiceW_service_handle, + { "Service Handle", "svcctl.svcctl_OpenServiceW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2A_buffer, + { "Buffer", "svcctl.svcctl_QueryServiceConfig2A.buffer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2A_handle, + { "Handle", "svcctl.svcctl_QueryServiceConfig2A.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2A_info_level, + { "Info Level", "svcctl.svcctl_QueryServiceConfig2A.info_level", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ConfigLevel_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2A_needed, + { "Needed", "svcctl.svcctl_QueryServiceConfig2A.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2A_offered, + { "Offered", "svcctl.svcctl_QueryServiceConfig2A.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2W_buffer, + { "Buffer", "svcctl.svcctl_QueryServiceConfig2W.buffer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2W_handle, + { "Handle", "svcctl.svcctl_QueryServiceConfig2W.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2W_info_level, + { "Info Level", "svcctl.svcctl_QueryServiceConfig2W.info_level", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_ConfigLevel_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2W_needed, + { "Needed", "svcctl.svcctl_QueryServiceConfig2W.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfig2W_offered, + { "Offered", "svcctl.svcctl_QueryServiceConfig2W.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigA_needed, + { "Needed", "svcctl.svcctl_QueryServiceConfigA.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigA_offered, + { "Offered", "svcctl.svcctl_QueryServiceConfigA.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigA_query, + { "Query", "svcctl.svcctl_QueryServiceConfigA.query", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigA_service_handle, + { "Service Handle", "svcctl.svcctl_QueryServiceConfigA.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigEx_info_level, + { "Info Level", "svcctl.svcctl_QueryServiceConfigEx.info_level", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigEx_service_handle, + { "Service Handle", "svcctl.svcctl_QueryServiceConfigEx.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigW_needed, + { "Needed", "svcctl.svcctl_QueryServiceConfigW.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigW_offered, + { "Offered", "svcctl.svcctl_QueryServiceConfigW.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigW_service_config, + { "Service Config", "svcctl.svcctl_QueryServiceConfigW.service_config", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceConfigW_service_handle, + { "Service Handle", "svcctl.svcctl_QueryServiceConfigW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusA_lock_status, + { "Lock Status", "svcctl.svcctl_QueryServiceLockStatusA.lock_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusA_needed, + { "Needed", "svcctl.svcctl_QueryServiceLockStatusA.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusA_offered, + { "Offered", "svcctl.svcctl_QueryServiceLockStatusA.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusA_scm_handle, + { "Scm Handle", "svcctl.svcctl_QueryServiceLockStatusA.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusW_lock_status, + { "Lock Status", "svcctl.svcctl_QueryServiceLockStatusW.lock_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusW_needed, + { "Needed", "svcctl.svcctl_QueryServiceLockStatusW.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusW_offered, + { "Offered", "svcctl.svcctl_QueryServiceLockStatusW.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceLockStatusW_scm_handle, + { "Scm Handle", "svcctl.svcctl_QueryServiceLockStatusW.scm_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceObjectSecurity_bytes_needed, + { "Bytes Needed", "svcctl.svcctl_QueryServiceObjectSecurity.bytes_needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceObjectSecurity_offered, + { "Offered", "svcctl.svcctl_QueryServiceObjectSecurity.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceObjectSecurity_security_descriptor, + { "Security Descriptor", "svcctl.svcctl_QueryServiceObjectSecurity.security_descriptor", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceObjectSecurity_security_flags, + { "Security Flags", "svcctl.svcctl_QueryServiceObjectSecurity.security_flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceObjectSecurity_service_handle, + { "Service Handle", "svcctl.svcctl_QueryServiceObjectSecurity.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatusEx_buffer, + { "Buffer", "svcctl.svcctl_QueryServiceStatusEx.buffer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatusEx_handle, + { "Handle", "svcctl.svcctl_QueryServiceStatusEx.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatusEx_info_level, + { "Info Level", "svcctl.svcctl_QueryServiceStatusEx.info_level", FT_UINT32, BASE_DEC, VALS(svcctl_svcctl_StatusLevel_vals), 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatusEx_needed, + { "Needed", "svcctl.svcctl_QueryServiceStatusEx.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatusEx_offered, + { "Offered", "svcctl.svcctl_QueryServiceStatusEx.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatus_service_handle, + { "Service Handle", "svcctl.svcctl_QueryServiceStatus.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_QueryServiceStatus_service_status, + { "Service Status", "svcctl.svcctl_QueryServiceStatus.service_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsA_handle, + { "Handle", "svcctl.svcctl_SCSetServiceBitsA.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsA_lpString, + { "LpString", "svcctl.svcctl_SCSetServiceBitsA.lpString", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsA_service_bits, + { "Service Bits", "svcctl.svcctl_SCSetServiceBitsA.service_bits", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsA_set_bits_on, + { "Set Bits On", "svcctl.svcctl_SCSetServiceBitsA.set_bits_on", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsA_update_immediately, + { "Update Immediately", "svcctl.svcctl_SCSetServiceBitsA.update_immediately", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsW_lpString, + { "LpString", "svcctl.svcctl_SCSetServiceBitsW.lpString", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsW_service_bits, + { "Service Bits", "svcctl.svcctl_SCSetServiceBitsW.service_bits", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsW_service_handle, + { "Service Handle", "svcctl.svcctl_SCSetServiceBitsW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsW_set_bits_on, + { "Set Bits On", "svcctl.svcctl_SCSetServiceBitsW.set_bits_on", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SCSetServiceBitsW_update_immediately, + { "Update Immediately", "svcctl.svcctl_SCSetServiceBitsW.update_immediately", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_CHANGE_CONFIG, + { "SC RIGHT SVC CHANGE CONFIG", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_CHANGE_CONFIG", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_CHANGE_CONFIG_tfs), ( 0x00000002 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_ENUMERATE_DEPENDENTS, + { "SC RIGHT SVC ENUMERATE DEPENDENTS", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_ENUMERATE_DEPENDENTS", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_ENUMERATE_DEPENDENTS_tfs), ( 0x00000008 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_INTERROGATE, + { "SC RIGHT SVC INTERROGATE", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_INTERROGATE", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_INTERROGATE_tfs), ( 0x00000080 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_PAUSE_CONTINUE, + { "SC RIGHT SVC PAUSE CONTINUE", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_PAUSE_CONTINUE", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_PAUSE_CONTINUE_tfs), ( 0x00000040 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_CONFIG, + { "SC RIGHT SVC QUERY CONFIG", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_QUERY_CONFIG", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_CONFIG_tfs), ( 0x00000001 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_STATUS, + { "SC RIGHT SVC QUERY STATUS", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_QUERY_STATUS", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_QUERY_STATUS_tfs), ( 0x00000004 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_START, + { "SC RIGHT SVC START", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_START", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_START_tfs), ( 0x00000010 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_STOP, + { "SC RIGHT SVC STOP", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_STOP", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_STOP_tfs), ( 0x00000020 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_ServiceAccessMask_SC_RIGHT_SVC_USER_DEFINED_CONTROL, + { "SC RIGHT SVC USER DEFINED CONTROL", "svcctl.svcctl_ServiceAccessMask.SC_RIGHT_SVC_USER_DEFINED_CONTROL", FT_BOOLEAN, 32, TFS(&svcctl_ServiceAccessMask_SC_RIGHT_SVC_USER_DEFINED_CONTROL_tfs), ( 0x00000100 ), NULL, HFILL }}, + { &hf_svcctl_svcctl_SetServiceObjectSecurity_offered, + { "Offered", "svcctl.svcctl_SetServiceObjectSecurity.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SetServiceObjectSecurity_security_descriptor, + { "Security Descriptor", "svcctl.svcctl_SetServiceObjectSecurity.security_descriptor", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SetServiceObjectSecurity_security_flags, + { "Security Flags", "svcctl.svcctl_SetServiceObjectSecurity.security_flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SetServiceObjectSecurity_service_handle, + { "Service Handle", "svcctl.svcctl_SetServiceObjectSecurity.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SetServiceStatus_service_handle, + { "Service Handle", "svcctl.svcctl_SetServiceStatus.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_SetServiceStatus_service_status, + { "Service Status", "svcctl.svcctl_SetServiceStatus.service_status", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_StartServiceA_Arguments, + { "Arguments", "svcctl.svcctl_StartServiceA.Arguments", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_StartServiceA_NumArgs, + { "NumArgs", "svcctl.svcctl_StartServiceA.NumArgs", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_StartServiceA_service_handle, + { "Service Handle", "svcctl.svcctl_StartServiceA.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_StartServiceW_Arguments, + { "Arguments", "svcctl.svcctl_StartServiceW.Arguments", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_StartServiceW_NumArgs, + { "NumArgs", "svcctl.svcctl_StartServiceW.NumArgs", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_StartServiceW_service_handle, + { "Service Handle", "svcctl.svcctl_StartServiceW.service_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_svcctl_UnlockServiceDatabase_lock_handle, + { "Lock Handle", "svcctl.svcctl_UnlockServiceDatabase.lock_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_svcctl_werror, + { "Windows Error", "svcctl.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }}, + }; + + + static gint *ett[] = { + &ett_svcctl_service, + &ett_svcctl_service_name, + &ett_svcctl_display_name, + &ett_dcerpc_svcctl, + &ett_svcctl_security_secinfo, + &ett_svcctl_SERVICE_LOCK_STATUS, + &ett_svcctl_svcctl_ControlsAccepted, + &ett_svcctl_SERVICE_STATUS, + &ett_svcctl_SERVICE_STATUS_PROCESS, + &ett_svcctl_ENUM_SERVICE_STATUSW, + &ett_svcctl_ENUM_SERVICE_STATUSA, + &ett_svcctl_svcctl_MgrAccessMask, + &ett_svcctl_svcctl_ServiceAccessMask, + &ett_svcctl_QUERY_SERVICE_CONFIG, + &ett_svcctl_svcctl_ArgumentString, + &ett_svcctl_svcctl_ArgumentStringA, + }; + + proto_dcerpc_svcctl = proto_register_protocol("Service Control", "SVCCTL", "svcctl"); + proto_register_field_array(proto_dcerpc_svcctl, hf, array_length (hf)); + proto_register_subtree_array(ett, array_length(ett)); +} + +void proto_reg_handoff_dcerpc_svcctl(void) +{ + dcerpc_init_uuid(proto_dcerpc_svcctl, ett_dcerpc_svcctl, + &uuid_dcerpc_svcctl, ver_dcerpc_svcctl, + svcctl_dissectors, hf_svcctl_opnum); +} |