示例#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;
        }
 private ContextResult(PresentationResultType result, int reason, RPC_SYNTAX_IDENTIFIER transfer_syntax)
 {
     Result = result;
     if (result == PresentationResultType.NegotiateAck)
     {
         BindTimeFeature = (BindTimeFeatureNegotiation)reason;
     }
     else
     {
         Reason = (PresentationResultReason)reason;
     }
     TransferSyntax = transfer_syntax;
 }
示例#3
0
        private static IntPtr GetClientInterface()
        {
            RPC_VERSION rpcv1 = new RPC_VERSION
            {
                MajorVersion = 1,
                MinorVersion = 0
            };

            RPC_VERSION rpcv2 = new RPC_VERSION
            {
                MajorVersion = 2,
                MinorVersion = 0
            };

            RPC_SYNTAX_IDENTIFIER InterfaceId = new RPC_SYNTAX_IDENTIFIER
            {
                SyntaxGUID    = new Guid(0x76f03f96, 0xcdfd, 0x44fc, 0xa2, 0x2c, 0x64, 0x95, 0x0a, 0x00, 0x12, 0x09),
                SyntaxVersion = rpcv1
            };

            RPC_SYNTAX_IDENTIFIER TransferSyntax = new RPC_SYNTAX_IDENTIFIER
            {
                SyntaxGUID    = new Guid(0x8a885d04, 0x1ceb, 0x11c9, 0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60),
                SyntaxVersion = rpcv2
            };

            RPC_CLIENT_INTERFACE logonRpcClientInterface = new RPC_CLIENT_INTERFACE
            {
                Length                  = (uint)Marshal.SizeOf(typeof(RPC_CLIENT_INTERFACE)),
                InterfaceId             = InterfaceId,
                TransferSyntax          = TransferSyntax,
                DispatchTable           = IntPtr.Zero, //PRPC_DISPATCH_TABLE
                RpcProtseqEndpointCount = 0,
                RpcProtseqEndpoint      = IntPtr.Zero, //PRPC_PROTSEQ_ENDPOINT
                Reserved                = IntPtr.Zero,
                InterpreterInfo         = IntPtr.Zero,
                Flags = 0x00000000
            };

            IntPtr plogonRpcClientInterface = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RPC_CLIENT_INTERFACE)));

            Marshal.StructureToPtr(logonRpcClientInterface, plogonRpcClientInterface, false);

            return(plogonRpcClientInterface);
        }
示例#4
0
 public RPC_CLIENT_INTERFACE(Guid iid, ushort InterfaceVersionMajor = 1, ushort InterfaceVersionMinor = 0)
 {
     Length      = (uint)Marshal.SizeOf(typeof(RPC_CLIENT_INTERFACE));
     InterfaceId = new RPC_SYNTAX_IDENTIFIER()
     {
         SyntaxGUID = iid, SyntaxVersion = new RPC_VERSION(InterfaceVersionMajor, InterfaceVersionMinor)
     };
     TransferSyntax = new RPC_SYNTAX_IDENTIFIER()
     {
         SyntaxGUID = IID_SYNTAX, SyntaxVersion = RPC_VERSION.SYNTAX_VERSION
     };
     DispatchTable           = IntPtr.Zero;
     RpcProtseqEndpointCount = 0u;
     RpcProtseqEndpoint      = IntPtr.Zero;
     Reserved        = IntPtr.Zero;
     InterpreterInfo = IntPtr.Zero;
     Flags           = 0u;
 }
示例#5
0
 public LRPC_BIND_MESSAGE(Guid guid, Version interface_version) : this()
 {
     Header            = new LRPC_HEADER(LRPC_MESSAGE_TYPE.lmtBind);
     Interface         = new RPC_SYNTAX_IDENTIFIER(guid, (ushort)interface_version.Major, (ushort)interface_version.Minor);
     TransferSyntaxSet = TransferSyntaxSetFlags.UseDce;
 }
示例#6
0
 private ContextResult(PresentationResultType result, PresentationResultReason reason, RPC_SYNTAX_IDENTIFIER transfer_syntax)
 {
     Result         = result;
     Reason         = reason;
     TransferSyntax = transfer_syntax;
 }
 private void WriteSyntax(BinaryWriter writer, RPC_SYNTAX_IDENTIFIER syntax)
 {
     writer.Write(syntax.SyntaxGUID.ToByteArray());
     writer.Write(syntax.SyntaxVersion.MajorVersion);
     writer.Write(syntax.SyntaxVersion.MinorVersion);
 }