Blame include/ntapi/nt_sem.h

4a2e49
#ifndef _NT_SEM_H_
4a2e49
#define _NT_SEM_H_
4a2e49
4a2e49
#include "nt_abi.h"
4a2e49
#include "nt_object.h"
4a2e49
4a2e49
/* semaphore commands */
4a2e49
#define NT_SEM_CMD_GETPID		(11)
4a2e49
#define NT_SEM_CMD_GETVAL		(12)
4a2e49
#define NT_SEM_CMD_GETALL		(13)
4a2e49
#define NT_SEM_CMD_GETNCNT		(14)
4a2e49
#define NT_SEM_CMD_GETZCNT		(15)
4a2e49
#define NT_SEM_CMD_SETVAL		(16)
4a2e49
#define NT_SEM_CMD_SETALL		(17)
4a2e49
4a2e49
4a2e49
/* semaphore command flags */
4a2e49
#define NT_SEM_FLAG_NOWAIT		(0x0800)
4a2e49
#define NT_SEM_FLAG_UNDO		(0x1000)
4a2e49
4a2e49
4a2e49
/* semaphore info */
4a2e49
typedef struct __attr_ptr_size_aligned__ _nt_sem_info {
4a2e49
	void *		hport;
4a2e49
	void *		section;
4a2e49
	void *		section_addr;
4a2e49
	size_t		section_size;
808b63
	void *		hevent;
4a2e49
	void *		apc_routine;
4a2e49
	void *		apc_context;
4a2e49
	int32_t		semkey;
4a2e49
	int32_t		semslots;
4a2e49
	int32_t		semid;
4a2e49
	int32_t		semnum;
4a2e49
	int32_t		semcmd;
4a2e49
	int32_t		sempid;
4a2e49
	int32_t		semncnt;
4a2e49
	int32_t		semzcnt;
4a2e49
	int32_t		semval;
4a2e49
	int32_t		semadj;
4a2e49
	nt_filetime	semotime;
4a2e49
	nt_filetime	semctime;
7701d9
	uint64_t	ipcuid;
7701d9
	uint64_t	ipcgid;
7701d9
	uint64_t	ipccuid;
7701d9
	uint64_t	ipccgid;
4a2e49
	uint32_t	ipcmode;
4a2e49
	int32_t		ipcseq;
4a2e49
	uint32_t	ntaccess;
4a2e49
	uint32_t	ntattr;
4a2e49
	uint32_t	ntshare;
4a2e49
	uint32_t	ntoptions;
808b63
	nt_iosb		ntiosb;
4a2e49
	nt_iosb *	riosb;
4a2e49
} nt_sem_info;
4a2e49
4a2e49
4a2e49
/* semaphore operation */
4a2e49
typedef struct _nt_sem_op {
4a2e49
        uint16_t	semnum;
4a2e49
        int16_t		semop;
4a2e49
        int16_t		semflag;
4a2e49
} nt_sem_op;
4a2e49
9faf9a
9faf9a
/* semaphore client interfaces */
9faf9a
typedef int32_t	__stdcall ntapi_sem_create(
9faf9a
	__in	void *			hport,
9faf9a
	__out	nt_sem_info *		sem,
9faf9a
	__in	uint32_t		access,
9faf9a
	__in	nt_object_attributes *	oa,
9faf9a
	__out	nt_iosb *		iosb,
9faf9a
	__in	uint32_t		share,
9faf9a
	__in	uint32_t		nslots);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_open(
9faf9a
	__in	void *			hport,
9faf9a
	__out	nt_sem_info *		sem,
9faf9a
	__in	uint32_t		access,
9faf9a
	__in	nt_object_attributes *	oa,
9faf9a
	__out	nt_iosb *		iosb,
9faf9a
	__in	uint32_t		share,
9faf9a
	__in	uint32_t		nslots);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_fcntl(
9faf9a
	__in	nt_sem_info *		sem,
9faf9a
	__in	void *			hevent			__optional,
9faf9a
	__in	nt_io_apc_routine *	apc_routine		__optional,
9faf9a
	__in	void *			apc_context		__optional,
9faf9a
	__out	nt_iosb *		iosb,
9faf9a
	__in	uint32_t		tty_control_code,
9faf9a
	__in	void *			input_buffer		__optional,
9faf9a
	__in	uint32_t		input_buffer_length,
9faf9a
	__out	void *			output_buffer		__optional,
9faf9a
	__in	uint32_t		output_buffer_length);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_ioctl(
9faf9a
	__in	nt_sem_info *		sem,
9faf9a
	__in	void *			hevent			__optional,
9faf9a
	__in	nt_io_apc_routine *	apc_routine		__optional,
9faf9a
	__in	void *			apc_context		__optional,
9faf9a
	__out	nt_iosb *		iosb,
9faf9a
	__in	uint32_t		ipc_control_code,
9faf9a
	__in	void *			input_buffer		__optional,
9faf9a
	__in	uint32_t		input_buffer_length,
9faf9a
	__out	void *			output_buffer		__optional,
9faf9a
	__in	uint32_t		output_buffer_length);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_query(
9faf9a
	__in	nt_sem_info *		sem,
9faf9a
	__out	nt_io_status_block *	iosb,
9faf9a
	__out	void *			sem_info,
9faf9a
	__in	uint32_t		sem_info_length,
9faf9a
	__in	int32_t			sem_ipc_cmd);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_set(
9faf9a
	__in	nt_sem_info *		sem,
9faf9a
	__out	nt_io_status_block *	iosb,
9faf9a
	__in	void *			sem_info,
9faf9a
	__in	uint32_t		sem_info_length,
9faf9a
	__in	int32_t			sem_ipc_cmd);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_cancel(
9faf9a
	__in	nt_sem_info *		sem,
9faf9a
	__out	nt_iosb *		iosb);
9faf9a
9faf9a
9faf9a
typedef int32_t	__stdcall ntapi_sem_free(
9faf9a
	__in	nt_sem_info *		sem,
9faf9a
	__out	nt_iosb *		iosb);
9faf9a
9faf9a
4a2e49
#endif