예제 #1
0
        public RPC_SERVER_INTERFACE(RpcHandle handle, Ptr <MIDL_SERVER_INFO> pServer, Guid iid)
        {
            Length      = (uint)Marshal.SizeOf(typeof(RPC_SERVER_INTERFACE));
            InterfaceId = new RPC_SYNTAX_IDENTIFIER()
            {
                SyntaxGUID = iid, SyntaxVersion = RPC_VERSION.INTERFACE_VERSION
            };
            TransferSyntax = new RPC_SYNTAX_IDENTIFIER()
            {
                SyntaxGUID = IID_SYNTAX, SyntaxVersion = RPC_VERSION.SYNTAX_VERSION
            };

            RPC_DISPATCH_TABLE fnTable = new RPC_DISPATCH_TABLE();

            fnTable.DispatchTableCount = 2;
            fnTable.DispatchTable      =
                handle.Pin(new RPC_DISPATCH_TABLE_Entry()
            {
                DispatchMethod      = RpcApi.ServerEntry.Handle,
                DispatchAsyncMethod = RpcApi.AsyncServerEntry.Handle,
                Zero = IntPtr.Zero
            });
            fnTable.Reserved = IntPtr.Zero;

            DispatchTable           = handle.Pin(fnTable);
            RpcProtseqEndpointCount = 0u;
            RpcProtseqEndpoint      = IntPtr.Zero;
            DefaultManagerEpv       = IntPtr.Zero;
            InterpreterInfo         = pServer.Handle;
            Flags = 0x04000000u;
        }
예제 #2
0
        private static RPC_SERVER_INTERFACE CreateExplicitBytesServer(RpcHandle handle, Ptr <MIDL_SERVER_INFO> pServer, Guid iid)
        {
            var server = new RPC_SERVER_INTERFACE();

            server.Length      = (uint)Marshal.SizeOf(typeof(RPC_SERVER_INTERFACE));
            server.InterfaceId = new RPC_SYNTAX_IDENTIFIER()
            {
                SyntaxGUID = iid, SyntaxVersion = ExplicitBytesConstants.INTERFACE_VERSION
            };
            server.TransferSyntax = new RPC_SYNTAX_IDENTIFIER()
            {
                SyntaxGUID = SYNTAX.SYNTAX_IID, SyntaxVersion = SYNTAX.SYNTAX_VERSION
            };

            var fnTable = new RPC_DISPATCH_TABLE();

            fnTable.DispatchTableCount = 1;
            fnTable.DispatchTable      =
                handle.Pin(new RPC_DISPATCH_TABLE_Entry()
            {
                DispatchMethod = RpcRuntime.ServerEntry.Handle, Zero = IntPtr.Zero
            });
            fnTable.Reserved = IntPtr.Zero;

            server.DispatchTable           = handle.Pin(fnTable);
            server.RpcProtseqEndpointCount = 0u;
            server.RpcProtseqEndpoint      = IntPtr.Zero;
            server.DefaultManagerEpv       = IntPtr.Zero;
            server.InterpreterInfo         = pServer.Handle;
            server.Flags = 0x04000000u;
            return(server);
        }