⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api.h

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 H
字号:
/* $Id: api.h 17431 2005-08-18 21:25:04Z ion $ */
#ifndef __SM_API_H
#define __SM_API_H

#include <sm/ns.h>

/*** DATA TYPES ******************************************************/

#define SM_SB_NAME_MAX_LENGTH 120

#include <pshpack4.h>

/* SmConnectApiPort (SS->SM) */
typedef struct _SM_CONNECT_DATA
{
  USHORT SubSystemId;
  WORD   Unused;
  WCHAR  SbName [SM_SB_NAME_MAX_LENGTH];

} SM_CONNECT_DATA, *PSM_CONNECT_DATA;

/* SmpConnectSbApiPort (SM->SS) */
typedef struct _SB_CONNECT_DATA
{
  ULONG SmApiMax;
} SB_CONNECT_DATA, *PSB_CONNECT_DATA;


/*** SM API ***/

/*** 1 ****************************************************************/

#define SM_API_COMPLETE_SESSION	1	/* complete a session initialization */

typedef struct _SM_PORT_MESSAGE_COMPSES
{
	HANDLE  hApiPort;
	HANDLE  hSbApiPort;

} SM_PORT_MESSAGE_COMPSES, *PSM_PORT_MESSAGE_COMPSES;

/*** 2 ****************************************************************/

#define SM_API_2 2

/* obsolete */

/*** 3 ****************************************************************/

#define SM_API_3 3

/* unknown */

/*** 4 ****************************************************************/

#define SM_API_EXECUTE_PROGRAMME	4	/* start a subsystem (server) */

#define SM_EXEXPGM_MAX_LENGTH	32		/* max count of wide string */

typedef struct _SM_PORT_MESSAGE_EXECPGM
{
  ULONG  NameLength;
  WCHAR  Name [SM_EXEXPGM_MAX_LENGTH];

} SM_PORT_MESSAGE_EXECPGM, *PSM_PORT_MESSAGE_EXECPGM;

/*** 5 ****************************************************************/

#define SM_API_QUERY_INFORMATION	5	/* ask SM to send back some data */
						/* Note: this is not in NT */
#define SM_QRYINFO_MAX_SS_COUNT 8
#define SM_QRYINFO_MAX_ROOT_NODE 30

typedef enum {
	SmBasicInformation     = 0,
	SmSubSystemInformation = 1,
} SM_INFORMATION_CLASS;

typedef struct _SM_BASIC_INFORMATION
{
	USHORT SubSystemCount;
	WORD Unused;
	struct {
		WORD Id;
		WORD Flags;
		DWORD ProcessId;
	} SubSystem [SM_QRYINFO_MAX_SS_COUNT];
} SM_BASIC_INFORMATION, *PSM_BASIC_INFORMATION;

typedef struct _SM_SUBSYSTEM_INFORMATION
{
	WORD  SubSystemId;
	WORD  Flags;
	DWORD ProcessId;
	WCHAR NameSpaceRootNode [SM_QRYINFO_MAX_ROOT_NODE];
} SM_SUBSYSTEM_INFORMATION, *PSM_SUBSYSTEM_INFORMATION;

typedef struct _SM_PORT_MESSAGE_QRYINFO
{
	SM_INFORMATION_CLASS SmInformationClass;
	ULONG DataLength;
	union {
		SM_BASIC_INFORMATION BasicInformation;
		SM_SUBSYSTEM_INFORMATION SubSystemInformation;
	};
} SM_PORT_MESSAGE_QRYINFO, * PSM_PORT_MESSAGE_QRYINFO;

/*** | ****************************************************************/

typedef union _SM_PORT_MESSAGE
{
    /*** LPC common header ***/
    PORT_MESSAGE Header;
    union
    {
        struct
        {
            UCHAR LpcHeader[sizeof(PORT_MESSAGE)];
            /*** SM common header ***/
            struct
            {
                DWORD       ApiIndex;
                NTSTATUS    Status;
            } SmHeader;
            /*** SM per API arguments ***/
            union
            {
                union
                {
                    SM_PORT_MESSAGE_COMPSES      CompSes;
                    SM_PORT_MESSAGE_EXECPGM      ExecPgm;
                    SM_PORT_MESSAGE_QRYINFO      QryInfo;
                } Request;
                union
                {
                    SM_PORT_MESSAGE_COMPSES      CompSes;
                    SM_PORT_MESSAGE_EXECPGM      ExecPgm;
                    SM_PORT_MESSAGE_QRYINFO      QryInfo;
                } Reply;
            };
        };
        UCHAR PadBuffer[PORT_MAXIMUM_MESSAGE_LENGTH];
    };
} SM_PORT_MESSAGE, * PSM_PORT_MESSAGE;

#include <poppack.h>

/*** MACRO ***********************************************************/

#define SM_CONNECT_DATA_SIZE(m)  ((m).Header.u1.s1.DataLength-sizeof(USHORT)-sizeof(WORD))
#define SM_PORT_DATA_SIZE(c)     (sizeof(DWORD)+sizeof(NTSTATUS)+sizeof(c))
#define SM_PORT_MESSAGE_SIZE     (sizeof(SM_PORT_MESSAGE))


#endif /* !def __SM_API_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -