{
#endif
-NTSTATUS STDCALL RtlRosCreateUserThreadEx
+NTSTATUS NTAPI RtlRosCreateUserThread
(
IN HANDLE ProcessHandle,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN LONG StackZeroBits,
IN OUT PULONG StackReserve OPTIONAL,
IN OUT PULONG StackCommit OPTIONAL,
- IN PTHREAD_START_ROUTINE StartAddress,
+ IN PVOID StartAddress,
OUT PHANDLE ThreadHandle OPTIONAL,
OUT PCLIENT_ID ClientId OPTIONAL,
IN ULONG ParameterCount,
IN LONG StackZeroBits,
IN OUT PULONG StackReserve OPTIONAL,
IN OUT PULONG StackCommit OPTIONAL,
- IN PTHREAD_START_ROUTINE StartAddress,
+ IN PVOID StartAddress,
OUT PHANDLE ThreadHandle OPTIONAL,
OUT PCLIENT_ID ClientId OPTIONAL,
IN ULONG ParameterCount,
...
);
-NTSTATUS NTAPI RtlRosInitializeContextEx
+NTSTATUS NTAPI RtlRosInitializeContext
(
IN HANDLE ProcessHandle,
- IN PCONTEXT Context,
- IN PTHREAD_START_ROUTINE StartAddress,
+ OUT PCONTEXT Context,
+ IN PVOID StartAddress,
IN PUSER_STACK UserStack,
IN ULONG ParameterCount,
IN ULONG_PTR * Parameters
);
+NTSTATUS NTAPI RtlRosCreateStack
+(
+ IN HANDLE ProcessHandle,
+ OUT PUSER_STACK UserStack,
+ IN LONG StackZeroBits,
+ IN OUT PULONG StackReserve OPTIONAL,
+ IN OUT PULONG StackCommit OPTIONAL
+);
+
+NTSTATUS NTAPI RtlRosDeleteStack
+(
+ IN HANDLE ProcessHandle,
+ IN PUSER_STACK UserStack
+);
+
+/* Private functions - for ROSRTL internal use only */
+NTSTATUS NTAPI RtlpRosGetStackLimits
+(
+ IN PUSER_STACK UserStack,
+ OUT PVOID * StackBase,
+ OUT PVOID * StackLimit
+);
+
+NTSTATUS NTAPI RtlpRosValidateLinearUserStack
+(
+ IN PVOID StackBase,
+ IN PVOID StackLimit,
+ IN BOOLEAN Direction
+);
+
+#define RtlpRosValidateTopDownUserStack(__B__, __L__) \
+ (RtlpRosValidateLinearUserStack((__B__), (__L__), FALSE))
+
+#define RtlpRosValidateDownTopUserStack(__B__, __L__) \
+ (RtlpRosValidateLinearUserStack((__B__), (__L__), TRUE))
+
#ifdef __cplusplus
}
#endif