X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=idl%2Fobjmgr.idl;h=bf7d08a4e35a62df93091b82e44fd13fc4b129fa;hp=0be5157831c81620997568b6ab0ec984b219c139;hb=9a0f3d7f714ebabb437c30863548146b307527b7;hpb=5ee1a4b6695c7889466f97d42b8c416b080b361d diff --git a/idl/objmgr.idl b/idl/objmgr.idl index 0be5157..bf7d08a 100644 --- a/idl/objmgr.idl +++ b/idl/objmgr.idl @@ -115,84 +115,23 @@ namespace Objects { DatumDesc[] data; }; - interface Class { - guid: "C30D0A85-EA8B-11D9-B985-000A95BB581A"; - query_interface(Interface iface, bool supported out); - instantiate(Object instance out); - }; - - interface Interface { - guid: "C36EBE18-EA8B-11D9-896D-000A95BB581A"; - }; - - interface Method { - guid: "C3D1BA69-EA8B-11D9-9439-000A95BB581A"; - }; - - interface Struct { - guid: "C4384909-EA8B-11D9-B856-000A95BB581A"; - }; - - interface Filter { - guid: "C4A89048-EA8B-11D9-BB2C-000A95BB581A"; + interface IDSpace { + guid: "06489629-9C25-4C14-9A5B-6C59639C87D6"; - // Returns the object from which the filter was created. - // This will only succeed if the calling process already - // has a reference to the real object. If the filter - // points to another filter, it will return the transitive - // real object if possible, or else the filter closest to - // the real object for which the process already has a - // reference. If neither the real object nor a closer - // filter can be returned, this filter itself is returned. - // This should not be used for comparing filter references, - // as separately created filters for the same object will - // have different IDs and pointers, even if they contain - // the same subset of interfaces. + new_object(Mem.AddrSpace aspace, ulong entry, ID obj out); - get_real_obj(Object obj out); - - // Returns a local ID of the real object, regardless of whether - // the calling process has a reference to it, or whether there - // are other intervening filters. The ID cannot be used to - // invoke methods, but it can be used to compare the identities - // of the objects behind different filter objects. If a real - // reference to the object is later obtained, it will have - // the same local ID. - - get_real_obj_id(ID id out); - }; - - interface ObjectManager { - guid: "C28596AB-EA8B-11D9-8DEB-000A95BB581A"; - - new_object(ID cla, ID obj out); - delete_object(ID obj) async; - - new_interface(ID cd, ID cla out); - delete_interface(ID cla, bool call_del) async; - - open_object(ID obj, uint handle out); - close_object(uint handle) async; - - // Create a filter object that implements only some of the - // interfaces implemented by "obj". This is useful to create a - // more limited reference to pass to less trusted processes. If - // "exclude" is true, then all interfaces but those specified will - // be included. Otherwise, only those interfaces specified will be - // included. A filter with no interfaces may be created to act as - // a (mostly) opaque handle. + // Release "num" references on the object. If exactly "num" + // references remain, the object handle is closed and "gone" is + // true. If more references remain, the handle is not closed and + // "gone" is false. If fewer references than "num" are present + // when called, no references are released, and RefCountException + // is thrown. // - // A holder of a filter reference can convert it into the real - // object if it already has (or later obtains) a reference to to - // the real object. It can also compare the identities of - // separately created filters pointing at the same object - // regardless of what it has a real reference to. Thus, filters - // should be used only to limit access granted by passing a - // reference to another process; it should not be used to hide the - // identity of the real object. + // A handle's refcount is incremented whenever a reference is + // received via IPC. Objects created with new_object start with + // a refcount of 1. - create_filter(Object obj, bool exclude, Interface[] ifaces, - Filter filter out); + release(ID obj, int num, bool gone out); }; // This is a generic Factory interface; specific factories may