70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
/*
|
|
* declsec.h: Declarative Security support
|
|
*
|
|
* Author:
|
|
* Sebastien Pouliot <sebastien@ximian.com>
|
|
*
|
|
* (C) 2004-2005 Novell (http://www.novell.com)
|
|
*/
|
|
|
|
#ifndef _MONO_MINI_DECLSEC_H_
|
|
#define _MONO_MINI_DECLSEC_H_
|
|
|
|
#include <string.h>
|
|
|
|
#include "mono/metadata/class-internals.h"
|
|
#include "mono/metadata/domain-internals.h"
|
|
#include "mono/metadata/object.h"
|
|
#include "mono/metadata/tabledefs.h"
|
|
#include "mono/metadata/marshal.h"
|
|
#include "mono/metadata/security-manager.h"
|
|
#include "mono/metadata/exception.h"
|
|
#include "mono/utils/mono-compiler.h"
|
|
|
|
|
|
/* Definitions */
|
|
|
|
#define MONO_CAS_INITIAL_STACK_SIZE 6
|
|
|
|
|
|
/* keep in synch with RuntimeSecurityFrame in /mcs/class/corlib/System.Security/SecurityFrame.cs */
|
|
typedef struct {
|
|
MonoObject obj;
|
|
MonoAppDomain *domain;
|
|
MonoReflectionMethod *method;
|
|
MonoDeclSecurityEntry assert;
|
|
MonoDeclSecurityEntry deny;
|
|
MonoDeclSecurityEntry permitonly;
|
|
} MonoSecurityFrame;
|
|
|
|
|
|
/* limited flags used in MonoJitInfo for stack modifiers */
|
|
enum {
|
|
MONO_JITINFO_STACKMOD_ASSERT = 0x01,
|
|
MONO_JITINFO_STACKMOD_DENY = 0x02,
|
|
MONO_JITINFO_STACKMOD_PERMITONLY = 0x04
|
|
};
|
|
|
|
enum {
|
|
MONO_JIT_SECURITY_OK = 0x00,
|
|
MONO_JIT_LINKDEMAND_PERMISSION = 0x01,
|
|
MONO_JIT_LINKDEMAND_APTC = 0x02,
|
|
MONO_JIT_LINKDEMAND_ECMA = 0x04,
|
|
MONO_JIT_LINKDEMAND_PINVOKE = 0x08
|
|
};
|
|
|
|
/* Prototypes */
|
|
MonoBoolean mono_method_has_declsec (MonoMethod *method) MONO_INTERNAL;
|
|
void mono_declsec_cache_stack_modifiers (MonoJitInfo *jinfo) MONO_INTERNAL;
|
|
MonoSecurityFrame* mono_declsec_create_frame (MonoDomain *domain, MonoJitInfo *jinfo) MONO_INTERNAL;
|
|
|
|
guint32 mono_declsec_linkdemand (MonoDomain *domain, MonoMethod *caller, MonoMethod *callee) MONO_INTERNAL;
|
|
|
|
#ifndef DISABLE_SECURITY
|
|
#define mono_security_method_has_declsec(method) (mono_method_has_declsec(method))
|
|
#else
|
|
#define mono_security_method_has_declsec(method) (FALSE)
|
|
#endif
|
|
|
|
#endif /* _MONO_MINI_DECLSEC_H_ */
|