IPC Capabilities

The problem is how to do messaging and capability Invoke ?

1) Capabilities will be sealed objects with internal constructors ( or private and a static internal generate method) 

Capabilities are not invoked they are merely used . Note it is possible for Capabilities to have methods but this will cause threading issues. Hence CDC ( Cross Domain Communication) is independent of Capabilities though Capability references are used as Paramaters. 

Where are they stored ?
 
Capabilities are stored in shared memory created by the capability service or kernel ( ie With the kernel ( or capability service) as the owner) . Hence user programs can reference them and can Invoke the object which will call the server. User programs ( or services) may not have a reference to any object or call the kernel . [Alternative is a special keyring which holds the capabilities which can hence call the kernel]

Capability 

public abstract Class Capability
{

protected Capability()   //warning should be internal for all derived classes
{

}

}

Secured System types and their Capabilities.

Core Capabilities

Null Capability 

SystemControl
	SystemControlCapability  Start, stop system, enter sleep states.

*Allocator
	AllocatorSpaceCapability

MemoryManager
	MemoryPageCapability

EndPoint 
	EndPointCapability   

Thread
	ThreadCapability
ScheduleCOntrol
	ScheduleControlCapability    ; Interface with scheduling primatives.

Processor 
	ProcessorScheduleQueue

Capability
	CapabilityRightsCapability 
	PersistLoadCapability

AppDomain
	AppDOmain Capability

Syslog
	Syslog Capability
IOPort
	IO Port Capability
DMA
	DMA Capability
IRQWait
	IRQ Wait Capability

User Capabilities

Directory
	DirectoryCapability
	ViewDIrectoryCapability
	ViewAndCreateCapability
File 
	ReadFileCapability
	WriteFileCapability
	ReadWriteFileCapability
	ReadExecuteFileCapability
	FileCapability

URI
	URICapability         Everything is a URI , file systems etc