summaryrefslogtreecommitdiff
path: root/common_modules/module_manager/inc/txm_module_manager_dispatch.h
diff options
context:
space:
mode:
Diffstat (limited to 'common_modules/module_manager/inc/txm_module_manager_dispatch.h')
-rw-r--r--common_modules/module_manager/inc/txm_module_manager_dispatch.h296
1 files changed, 156 insertions, 140 deletions
diff --git a/common_modules/module_manager/inc/txm_module_manager_dispatch.h b/common_modules/module_manager/inc/txm_module_manager_dispatch.h
index 03bd86eb..e8c0629b 100644
--- a/common_modules/module_manager/inc/txm_module_manager_dispatch.h
+++ b/common_modules/module_manager/inc/txm_module_manager_dispatch.h
@@ -1,6 +1,7 @@
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2025 Eclipse ThreadX Contributors
+ * Copyright (c) 2026 Eclipse ThreadX contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
@@ -8,6 +9,7 @@
*
* SPDX-License-Identifier: MIT
**************************************************************************/
+// Portions of this file were generated with AI assistance.
/**************************************************************************/
@@ -33,7 +35,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BLOCK_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BLOCK_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(VOID *)))
@@ -52,7 +54,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_BLOCK_POOL_CREATE_CALL_NOT_USED
/* UINT _txe_block_pool_create(
TX_BLOCK_POOL *pool_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
ULONG block_size, -> extra_parameters[0]
VOID *pool_start, -> extra_parameters[1]
ULONG pool_size, -> extra_parameters[2]
@@ -71,7 +73,7 @@ ALIGN_TYPE return_value;
if (!TXM_MODULE_MANAGER_PARAM_CHECK_DEREFERENCE_STRING(module_instance, param_1))
return(TXM_MODULE_INVALID_MEMORY);
- if (!TXM_MODULE_MANAGER_ENSURE_INSIDE_MODULE_DATA(module_instance, (ALIGN_TYPE)extra_parameters, sizeof(ALIGN_TYPE[2])))
+ if (!TXM_MODULE_MANAGER_ENSURE_INSIDE_MODULE_DATA(module_instance, (ALIGN_TYPE)extra_parameters, sizeof(ALIGN_TYPE[4])))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, extra_parameters[1], extra_parameters[2]))
@@ -80,7 +82,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_block_pool_create(
(TX_BLOCK_POOL *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(ULONG) extra_parameters[0],
(VOID *) extra_parameters[1],
(ULONG) extra_parameters[2],
@@ -101,7 +103,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BLOCK_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BLOCK_POOL_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_BLOCK_POOL)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -121,7 +126,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_BLOCK_POOL_INFO_GET_CALL_NOT_USED
/* UINT _txe_block_pool_info_get(
TX_BLOCK_POOL *pool_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
ULONG *available_blocks, -> extra_parameters[0]
ULONG *total_blocks, -> extra_parameters[1]
TX_THREAD **first_suspended, -> extra_parameters[2]
@@ -135,7 +140,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BLOCK_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BLOCK_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -162,7 +167,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_block_pool_info_get(
(TX_BLOCK_POOL *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(ULONG *) extra_parameters[0],
(ULONG *) extra_parameters[1],
(TX_THREAD **) extra_parameters[2],
@@ -188,7 +193,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BLOCK_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BLOCK_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -269,7 +274,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BLOCK_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BLOCK_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -335,7 +340,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BYTE_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BYTE_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(VOID *)))
@@ -358,7 +363,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_BYTE_POOL_CREATE_CALL_NOT_USED
/* UINT _txe_byte_pool_create(
TX_BYTE_POOL *pool_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
VOID *pool_start, -> extra_parameters[0]
ULONG pool_size, -> extra_parameters[1]
UINT pool_control_block_size -> extra_parameters[2]
@@ -385,7 +390,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_byte_pool_create(
(TX_BYTE_POOL *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(VOID *) extra_parameters[0],
(ULONG) extra_parameters[1],
(UINT) extra_parameters[2]
@@ -405,7 +410,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BYTE_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BYTE_POOL_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_BYTE_POOL)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -425,7 +433,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_BYTE_POOL_INFO_GET_CALL_NOT_USED
/* UINT _txe_byte_pool_info_get(
TX_BYTE_POOL *pool_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
ULONG *available_bytes, -> extra_parameters[0]
ULONG *fragments, -> extra_parameters[1]
TX_THREAD **first_suspended, -> extra_parameters[2]
@@ -439,7 +447,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BYTE_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BYTE_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -466,7 +474,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_byte_pool_info_get(
(TX_BYTE_POOL *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(ULONG *) extra_parameters[0],
(ULONG *) extra_parameters[1],
(TX_THREAD **) extra_parameters[2],
@@ -495,7 +503,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BYTE_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BYTE_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -603,7 +611,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_BYTE_POOL)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_BYTE_POOL_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -658,7 +666,7 @@ ALIGN_TYPE block_header_start;
#ifndef TXM_EVENT_FLAGS_CREATE_CALL_NOT_USED
/* UINT _txe_event_flags_create(
TX_EVENT_FLAGS_GROUP *group_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
UINT event_control_block_size -> param_2
); */
static ALIGN_TYPE _txm_module_manager_tx_event_flags_create_dispatch(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE param_0, ALIGN_TYPE param_1, ALIGN_TYPE param_2)
@@ -677,7 +685,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_event_flags_create(
(TX_EVENT_FLAGS_GROUP *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(UINT) param_2
);
return(return_value);
@@ -695,7 +703,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_EVENT_FLAGS_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -727,7 +738,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_EVENT_FLAGS_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, extra_parameters[1], sizeof(ULONG)))
@@ -751,7 +762,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_EVENT_FLAGS_INFO_GET_CALL_NOT_USED
/* UINT _txe_event_flags_info_get(
TX_EVENT_FLAGS_GROUP *group_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
ULONG *current_flags, -> extra_parameters[0]
TX_THREAD **first_suspended, -> extra_parameters[1]
ULONG *suspended_count, -> extra_parameters[2]
@@ -764,7 +775,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_EVENT_FLAGS_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -788,7 +799,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_event_flags_info_get(
(TX_EVENT_FLAGS_GROUP *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(ULONG *) extra_parameters[0],
(TX_THREAD **) extra_parameters[1],
(ULONG *) extra_parameters[2],
@@ -813,7 +824,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_EVENT_FLAGS_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -896,7 +907,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_EVENT_FLAGS_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -923,7 +934,7 @@ VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *);
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_EVENT_FLAGS_GROUP)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_EVENT_FLAGS_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* Since we need to write to the object, ensure it's valid. */
@@ -958,7 +969,7 @@ VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *);
#ifndef TXM_MUTEX_CREATE_CALL_NOT_USED
/* UINT _txe_mutex_create(
TX_MUTEX *mutex_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
UINT inherit, -> extra_parameters[0]
UINT mutex_control_block_size -> extra_parameters[1]
); */
@@ -981,7 +992,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_mutex_create(
(TX_MUTEX *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(UINT) extra_parameters[0],
(UINT) extra_parameters[1]
);
@@ -1000,7 +1011,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_MUTEX)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_MUTEX_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_MUTEX)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1029,7 +1043,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_MUTEX)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_MUTEX_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1044,7 +1058,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_MUTEX_INFO_GET_CALL_NOT_USED
/* UINT _txe_mutex_info_get(
TX_MUTEX *mutex_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
ULONG *count, -> extra_parameters[0]
TX_THREAD **owner, -> extra_parameters[1]
TX_THREAD **first_suspended, -> extra_parameters[2]
@@ -1058,7 +1072,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_MUTEX)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_MUTEX_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -1085,7 +1099,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_mutex_info_get(
(TX_MUTEX *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(ULONG *) extra_parameters[0],
(TX_THREAD **) extra_parameters[1],
(TX_THREAD **) extra_parameters[2],
@@ -1113,7 +1127,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_MUTEX)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_MUTEX_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -1212,7 +1226,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_MUTEX)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_MUTEX_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1234,7 +1248,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_MUTEX)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_MUTEX_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1248,7 +1262,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_QUEUE_CREATE_CALL_NOT_USED
/* UINT _txe_queue_create(
TX_QUEUE *queue_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
UINT message_size, -> extra_parameters[0]
VOID *queue_start, -> extra_parameters[1]
ULONG queue_size, -> extra_parameters[2]
@@ -1276,7 +1290,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_queue_create(
(TX_QUEUE *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(UINT) extra_parameters[0],
(VOID *) extra_parameters[1],
(ULONG) extra_parameters[2],
@@ -1297,7 +1311,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_QUEUE)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1325,7 +1342,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1350,12 +1367,12 @@ TX_QUEUE *queue_ptr;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* We need to get the size of the message from the queue. */
queue_ptr = (TX_QUEUE *) param_0;
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_READ(module_instance, param_1, queue_ptr -> tx_queue_message_size))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_READ(module_instance, param_1, sizeof(ULONG)*queue_ptr -> tx_queue_message_size))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1371,7 +1388,7 @@ TX_QUEUE *queue_ptr;
#ifndef TXM_QUEUE_INFO_GET_CALL_NOT_USED
/* UINT _txe_queue_info_get(
TX_QUEUE *queue_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
ULONG *enqueued, -> extra_parameters[0]
ULONG *available_storage, -> extra_parameters[1]
TX_THREAD **first_suspended, -> extra_parameters[2]
@@ -1385,7 +1402,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -1412,7 +1429,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_queue_info_get(
(TX_QUEUE *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(ULONG *) extra_parameters[0],
(ULONG *) extra_parameters[1],
(TX_THREAD **) extra_parameters[2],
@@ -1440,7 +1457,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -1539,7 +1556,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1564,7 +1581,7 @@ TX_QUEUE *queue_ptr;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* We need to get the max size of the buffer from the queue. */
@@ -1596,7 +1613,7 @@ TX_QUEUE *queue_ptr;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* We need to get the size of the message from the queue. */
@@ -1628,7 +1645,7 @@ VOID (*queue_send_notify)(TX_QUEUE *);
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_QUEUE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_QUEUE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* Since we need to write to the object, ensure it's valid. */
@@ -1672,7 +1689,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1687,7 +1704,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_SEMAPHORE_CREATE_CALL_NOT_USED
/* UINT _txe_semaphore_create(
TX_SEMAPHORE *semaphore_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
ULONG initial_count, -> extra_parameters[0]
UINT semaphore_control_block_size -> extra_parameters[1]
); */
@@ -1710,7 +1727,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_semaphore_create(
(TX_SEMAPHORE *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(ULONG) extra_parameters[0],
(UINT) extra_parameters[1]
);
@@ -1729,7 +1746,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_SEMAPHORE)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1758,7 +1778,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1773,7 +1793,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_SEMAPHORE_INFO_GET_CALL_NOT_USED
/* UINT _txe_semaphore_info_get(
TX_SEMAPHORE *semaphore_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
ULONG *current_value, -> extra_parameters[0]
TX_THREAD **first_suspended, -> extra_parameters[1]
ULONG *suspended_count, -> extra_parameters[2]
@@ -1786,7 +1806,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -1810,7 +1830,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_semaphore_info_get(
(TX_SEMAPHORE *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(ULONG *) extra_parameters[0],
(TX_THREAD **) extra_parameters[1],
(ULONG *) extra_parameters[2],
@@ -1835,7 +1855,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -1916,7 +1936,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1938,7 +1958,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -1963,7 +1983,7 @@ VOID (*semaphore_put_notify)(TX_SEMAPHORE *);
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_SEMAPHORE)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_SEMAPHORE_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* Since we need to write to the object, ensure it's valid. */
@@ -1998,7 +2018,7 @@ VOID (*semaphore_put_notify)(TX_SEMAPHORE *);
#ifndef TXM_THREAD_CREATE_CALL_NOT_USED
/* UINT _txe_thread_create(
TX_THREAD *thread_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
VOID (*entry_function)(ULONG entry_input), -> extra_parameters[0]
ULONG entry_input, -> extra_parameters[1]
VOID *stack_start, -> extra_parameters[2]
@@ -2037,7 +2057,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txm_module_manager_thread_create(
(TX_THREAD *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
module_instance -> txm_module_instance_shell_entry_function,
(VOID (*)(ULONG entry_input)) extra_parameters[0],
(ULONG) extra_parameters[1],
@@ -2061,22 +2081,48 @@ ALIGN_TYPE return_value;
static ALIGN_TYPE _txm_module_manager_tx_thread_delete_dispatch(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE param_0)
{
-ALIGN_TYPE return_value;
+TX_THREAD *thread_ptr;
+ALIGN_TYPE return_value;
+ALIGN_TYPE stack_status;
+
+ thread_ptr = (TX_THREAD *) param_0;
+ stack_status = (ALIGN_TYPE) TX_SUCCESS;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_THREAD)))
return(TXM_MODULE_INVALID_MEMORY);
}
- return_value = (ALIGN_TYPE) _txe_thread_delete(
- (TX_THREAD *) param_0
- );
+ return_value = (ALIGN_TYPE) _txe_thread_delete(thread_ptr);
- /* Deallocate object memory. */
+ /* Deallocate the kernel stack for a user-mode thread. The pointer is tested
+ rather than the module's properties: both thread create paths clear the whole
+ control block before filling it in, so a thread that carries no kernel stack
+ the manager allocated holds TX_NULL here, and a user-mode module can be given
+ the address of such a thread. */
+ if ((return_value == TX_SUCCESS) &&
+ (module_instance -> txm_module_instance_property_flags & TXM_MODULE_USER_MODE) &&
+ (thread_ptr -> tx_thread_module_kernel_stack_start != TX_NULL))
+ {
+ stack_status = _txm_module_manager_object_deallocate(thread_ptr -> tx_thread_module_kernel_stack_start);
+ }
+
+ /* Deallocate thread object memory. This must be attempted even when the kernel
+ stack could not be released, otherwise a successful thread delete would leave
+ the thread object allocated forever. */
if (return_value == TX_SUCCESS)
{
- return_value = _txm_module_manager_object_deallocate((VOID *) param_0);
+ return_value = _txm_module_manager_object_deallocate((VOID *) thread_ptr);
+
+ /* Report the kernel stack failure if the thread object was released. */
+ if ((return_value == TX_SUCCESS) && (stack_status != TX_SUCCESS))
+ {
+ return_value = stack_status;
+ }
}
return(return_value);
}
@@ -2097,7 +2143,7 @@ VOID (*thread_entry_exit_notify)(TX_THREAD *, UINT);
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
/* Since we need to write to the object, ensure it's valid. */
@@ -2148,7 +2194,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_THREAD_INFO_GET_CALL_NOT_USED
/* UINT _txe_thread_info_get(
TX_THREAD *thread_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
UINT *state, -> extra_parameters[0]
ULONG *run_count, -> extra_parameters[1]
UINT *priority, -> extra_parameters[2]
@@ -2164,7 +2210,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -2197,7 +2243,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_thread_info_get(
(TX_THREAD *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(UINT *) extra_parameters[0],
(ULONG *) extra_parameters[1],
(UINT *) extra_parameters[2],
@@ -2250,7 +2296,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -2397,7 +2443,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_2, sizeof(UINT)))
@@ -2431,7 +2477,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_2, sizeof(UINT)))
@@ -2468,7 +2514,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2490,7 +2536,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2547,7 +2593,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2576,7 +2622,7 @@ TX_THREAD *thread_ptr;
{
return(TXM_MODULE_INVALID_MEMORY);
}
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2626,7 +2672,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2650,7 +2696,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_2, sizeof(ULONG)))
@@ -2677,7 +2723,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_THREAD_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2725,7 +2771,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_TIMER)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_TIMER_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2749,7 +2795,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_TIMER)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_TIMER_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2765,7 +2811,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_TIMER_CREATE_CALL_NOT_USED
/* UINT _txe_timer_create(
TX_TIMER *timer_ptr, -> param_0
- CHAR *name_ptr, -> param_1
+ TX_NAME_CONST CHAR *name_ptr, -> param_1
VOID (*expiration_function)(ULONG), -> extra_parameters[0]
ULONG expiration_input, -> extra_parameters[1]
ULONG initial_ticks, -> extra_parameters[2]
@@ -2808,7 +2854,7 @@ VOID (*expiration_function)(ULONG);
return_value = (ALIGN_TYPE) _txe_timer_create(
(TX_TIMER *) param_0,
- (CHAR *) param_1,
+ (TX_NAME_CONST CHAR *) param_1,
(VOID (*)(ULONG)) expiration_function,
(ULONG) extra_parameters[1],
(ULONG) extra_parameters[2],
@@ -2846,7 +2892,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_TIMER)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_TIMER_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2868,7 +2914,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_TIMER)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_TIMER_OBJECT))
+ return(TXM_MODULE_INVALID_MEMORY);
+
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_DELETION(module_instance, param_0, sizeof(TX_TIMER)))
return(TXM_MODULE_INVALID_MEMORY);
}
@@ -2888,7 +2937,7 @@ ALIGN_TYPE return_value;
#ifndef TXM_TIMER_INFO_GET_CALL_NOT_USED
/* UINT _txe_timer_info_get(
TX_TIMER *timer_ptr, -> param_0
- CHAR **name, -> param_1
+ TX_NAME_CONST CHAR **name, -> param_1
UINT *active, -> extra_parameters[0]
ULONG *remaining_ticks, -> extra_parameters[1]
ULONG *reschedule_ticks, -> extra_parameters[2]
@@ -2901,7 +2950,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_TIMER)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_TIMER_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(CHAR *)))
@@ -2925,7 +2974,7 @@ ALIGN_TYPE return_value;
return_value = (ALIGN_TYPE) _txe_timer_info_get(
(TX_TIMER *) param_0,
- (CHAR **) param_1,
+ (TX_NAME_CONST CHAR **) param_1,
(UINT *) extra_parameters[0],
(ULONG *) extra_parameters[1],
(ULONG *) extra_parameters[2],
@@ -2951,7 +3000,7 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_TIMER)))
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_TYPED_OBJECT_FOR_USE(module_instance, param_0, TXM_TIMER_OBJECT))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_1, sizeof(ULONG)))
@@ -3232,41 +3281,6 @@ static ALIGN_TYPE _txm_module_manager_txm_module_object_deallocate_dispatch(TXM_
{
ALIGN_TYPE return_value;
-TXM_MODULE_ALLOCATED_OBJECT *object_ptr;
-ALIGN_TYPE object_end;
-ALIGN_TYPE object_pool_end;
-
- if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
- {
- /* Is the object pool created? */
- if (_txm_module_manager_object_pool_created == TX_TRUE)
- {
-
- /* Get the module allocated object. */
- object_ptr = ((TXM_MODULE_ALLOCATED_OBJECT *) param_0) - 1;
-
- /* Get the end address of the object pool. */
- object_pool_end = (ALIGN_TYPE) (_txm_module_manager_object_pool.tx_byte_pool_start + _txm_module_manager_object_pool.tx_byte_pool_size);
-
- /* Check that the pointer is in the object pool. */
- if ((ALIGN_TYPE) object_ptr < (ALIGN_TYPE) _txm_module_manager_object_pool.tx_byte_pool_start ||
- (ALIGN_TYPE) object_ptr >= (ALIGN_TYPE) object_pool_end)
- {
- /* Pointer is outside of the object pool. */
- return(TXM_MODULE_INVALID_MEMORY);
- }
-
- /* Get the end addresses of the object. */
- object_end = ((ALIGN_TYPE) object_ptr) + sizeof(TXM_MODULE_ALLOCATED_OBJECT) + object_ptr -> txm_module_object_size;
-
- /* Check that the object is in the object pool. */
- if (object_end >= object_pool_end)
- {
- /* Object is outside of the object pool. */
- return(TXM_MODULE_INVALID_MEMORY);
- }
- }
- }
return_value = (ALIGN_TYPE) _txm_module_manager_object_deallocate(
(VOID *) param_0
@@ -3288,11 +3302,10 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_DEREFERENCE_STRING(module_instance, param_1))
- return(TXM_MODULE_INVALID_MEMORY);
-
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, param_2, sizeof(VOID *)))
- return(TXM_MODULE_INVALID_MEMORY);
+ /* This service carries no name length, so the manager searches with the largest
+ length a UINT can hold and no readable range can be proven for the name. A
+ memory-protected module must use the extended service, which declares one. */
+ return(TXM_MODULE_INVALID_MEMORY);
}
return_value = (ALIGN_TYPE) _txm_module_manager_object_pointer_get(
@@ -3318,10 +3331,13 @@ ALIGN_TYPE return_value;
if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
- if (!TXM_MODULE_MANAGER_PARAM_CHECK_DEREFERENCE_STRING(module_instance, param_1))
+ if (!TXM_MODULE_MANAGER_ENSURE_INSIDE_MODULE_DATA(module_instance, (ALIGN_TYPE)extra_parameters, sizeof(ALIGN_TYPE[2])))
return(TXM_MODULE_INVALID_MEMORY);
- if (!TXM_MODULE_MANAGER_ENSURE_INSIDE_MODULE_DATA(module_instance, (ALIGN_TYPE)extra_parameters, sizeof(ALIGN_TYPE[2])))
+ /* The name length has to be checked before it is trusted, so the extra parameter
+ array is checked first. The comparison reads the declared length plus the
+ terminator that follows it, and all of that must be inside the module. */
+ if (!TXM_MODULE_MANAGER_PARAM_CHECK_DEREFERENCE_STRING_RANGE(module_instance, param_1, (UINT) extra_parameters[0]))
return(TXM_MODULE_INVALID_MEMORY);
if (!TXM_MODULE_MANAGER_PARAM_CHECK_BUFFER_WRITE(module_instance, extra_parameters[1], sizeof(VOID *)))