Blame include/ntapi/nt_argv.h

dd89bb
#ifndef _NT_ARGV_H_
dd89bb
#define _NT_ARGV_H_
dd89bb
dd89bb
/******************************************************
dd89bb
 *                                                    *
dd89bb
 *   this header is REALLY NOT what you are looking   *
dd89bb
 *   for, however if you are into writing your apps   *
dd89bb
 *   using the Native API only, then you might find   *
dd89bb
 *   the below interfaces somehow useful.             *
dd89bb
 *                                                    *
dd89bb
 *****************************************************/
dd89bb
414ad3
#include "nt_abi.h"
dd89bb
a40312
/* ntapi_tt_get_argv_envp flag bits */
dd89bb
#define NT_GET_ARGV_ENVP_USE_INTERNAL_BUFFER	(0x0000)
dd89bb
#define NT_GET_ARGV_ENVP_USE_CALLER_BUFFER	(0x0001)
dd89bb
#define NT_GET_ARGV_ENVP_COPY_ENVIRONMENT	(0x0002)
a40312
#define NT_GET_ARGV_ENVP_VALIDATE_UTF8		(0x0004)
a40312
#define NT_GET_ARGV_ENVP_VALIDATE_UTF16		(0x0008)
dd89bb
dd89bb
a40312
typedef struct _nt_env_var_meta_utf8 {
a40312
	char *		name;
a40312
	char *		value;
a40312
	int		envp_index;
a40312
	uint32_t	flags;
a40312
} nt_env_var_meta_utf8;
a40312
a40312
dd89bb
typedef struct _nt_env_var_meta_utf16 {
dd89bb
	wchar16_t *	name;
dd89bb
	wchar16_t *	value;
dd89bb
	int		envp_index;
dd89bb
	uint32_t	flags;
dd89bb
} nt_env_var_meta_utf16;
dd89bb
dd89bb
dd89bb
typedef struct _nt_argv_envp_block_info {
dd89bb
	wchar16_t *	cmd_line;
dd89bb
	wchar16_t **	wargv_buffer;
dd89bb
	size_t		wargv_buffer_len;
dd89bb
	wchar16_t *	wargs_buffer;
dd89bb
	size_t		wargs_buffer_len;
dd89bb
	size_t		wargs_bytes_written;
dd89bb
	wchar16_t **	wenvp_buffer;
dd89bb
	size_t		wenvp_buffer_len;
dd89bb
	wchar16_t *	wenvs_buffer;
dd89bb
	size_t		wenvs_buffer_len;
dd89bb
	size_t		wenvs_bytes_used;
dd89bb
	char *		args_buffer;
dd89bb
	size_t		args_buffer_len;
dd89bb
	size_t		args_bytes_written;
dd89bb
	char *		envs_buffer;
dd89bb
	size_t		envs_buffer_len;
dd89bb
	size_t		envs_bytes_used;
dd89bb
	uint32_t	arg_flags;
dd89bb
	uint32_t	env_flags;
dd89bb
	uint32_t	psx_flags;
dd89bb
	uint32_t	psx_padding;
dd89bb
	uint32_t	argv_envp_ptr_total;
dd89bb
	int		envc;
dd89bb
dd89bb
	int		argc;
dd89bb
	char **		argv;
dd89bb
	char **		envp;
dd89bb
} nt_argv_envp_block_info;
dd89bb
dd89bb
dd89bb
typedef struct _nt_get_argv_envp_ext_params {
dd89bb
	nt_argv_envp_block_info	argv_envp_block_info;
dd89bb
} nt_get_argv_envp_ext_params;
dd89bb
dd89bb
dd89bb
typedef wchar16_t * __stdcall	ntapi_tt_get_cmd_line_utf16(void);
dd89bb
dd89bb
dd89bb
typedef wchar16_t * __stdcall	ntapi_tt_get_peb_env_block_utf16(void);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_parse_cmd_line_args_utf16(
dd89bb
	__in	wchar16_t *	cmd_line,
dd89bb
	__out	int *		arg_count,
dd89bb
	__in	wchar16_t *	args_buffer,
dd89bb
	__in	size_t		args_buffer_len,
dd89bb
	__out	size_t *	args_bytes_written __optional,
dd89bb
	__in	wchar16_t **	argv_buffer,
dd89bb
	__in	size_t		argv_buffer_len,
dd89bb
	__in	uint32_t	arg_flags);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_get_argv_envp_utf8(
dd89bb
	__out	int *		argc,
dd89bb
	__out	char ***	argv,
dd89bb
	__out	char ***	envp,
dd89bb
	__in	uint32_t	flags,
dd89bb
	__in	void *		ext_params	__optional,
dd89bb
	__out	void *		reserved	__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_get_argv_envp_utf16(
dd89bb
	__out	int *		argc,
dd89bb
	__out	wchar16_t ***	wargv,
dd89bb
	__out	wchar16_t ***	wenvp,
dd89bb
	__in	uint32_t	flags,
dd89bb
	__in	void *		ext_params	__optional,
dd89bb
	__out	void *		reserved	__optional);
dd89bb
dd89bb
a40312
typedef int32_t __stdcall 	ntapi_tt_get_env_var_meta_utf8(
a40312
	__in	char *			env_var_name,
a40312
	__in	char **			envp,
a40312
	__out	nt_env_var_meta_utf8 *	env_var_meta);
a40312
a40312
dd89bb
typedef int32_t __stdcall 	ntapi_tt_get_env_var_meta_utf16(
dd89bb
	__in	wchar16_t *		env_var_name,
dd89bb
	__in	wchar16_t **		envp,
dd89bb
	__out	nt_env_var_meta_utf16 *	env_var_meta);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_copy_utf8(
dd89bb
	__out	int *			argc,
dd89bb
	__in	const char **		argv,
15812f
	__in	const char **		envp,
15812f
	__in	const char *		interp		__optional,
dd89bb
	__in	const char *		optarg		__optional,
15812f
	__in	const char *		script		__optional,
dd89bb
	__in	void *			base,
dd89bb
	__out	void *			buffer,
dd89bb
	__in	size_t			buflen,
dd89bb
	__out	size_t *		blklen);
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_copy_utf16(
dd89bb
	__out	int *			argc,
dd89bb
	__in	const wchar16_t **	wargv,
dd89bb
	__in	const wchar16_t **	wenvp,
112cac
	__in	const wchar16_t *	interp		__optional,
dd89bb
	__in	const wchar16_t *	optarg		__optional,
112cac
	__in	const wchar16_t *	script		__optional,
dd89bb
	__in	void *			base,
dd89bb
	__out	void *			buffer,
dd89bb
	__in	size_t			buflen,
dd89bb
	__out	size_t *		blklen);
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_convert_utf8_to_utf16(
dd89bb
	__in		char **		arrv,
dd89bb
	__in		wchar16_t **	arra,
dd89bb
	__in		void *		base,
dd89bb
	__in		wchar16_t *	buffer,
dd89bb
	__in		size_t		buffer_len,
dd89bb
	__out		size_t *	bytes_written);
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_convert_utf16_to_utf8(
dd89bb
	__in		wchar16_t **	warrv,
dd89bb
	__in		char **		arra,
dd89bb
	__in		void *		base,
dd89bb
	__in		char *		buffer,
dd89bb
	__in		size_t		buffer_len,
dd89bb
	__out		size_t *	bytes_written);
dd89bb
dd89bb
#endif