/// <summary>
        ///  NetrLogonUasLogon IDL method. Opnum: 0 
        /// </summary>
        /// <param name="ServerName">
        ///  ServerName parameter.
        /// </param>
        /// <param name="UserName">
        ///  UserName parameter.
        /// </param>
        /// <param name="Workstation">
        ///  Workstation parameter.
        /// </param>
        /// <param name="ValidationInformation">
        ///  ValidationInformation parameter.
        /// </param>
        public NetApiStatus NetrLogonUasLogon(
            string ServerName,
            string UserName,
            string Workstation,
            out _NETLOGON_VALIDATION_UAS_INFO? ValidationInformation)
        {
            const ushort opnum = 0;

            byte[] requestStub;
            byte[] responseStub;
            Int3264[] paramList;
            int retVal;

            SafeIntPtr pServerName = Marshal.StringToHGlobalUni(ServerName);
            SafeIntPtr pUserName = Marshal.StringToHGlobalUni(UserName);
            SafeIntPtr pWorkstation = Marshal.StringToHGlobalUni(Workstation);

            paramList = new Int3264[] {
                pServerName,
                pUserName,
                pWorkstation,
                IntPtr.Zero,
                0 // retVal
            };

            requestStub = RpceStubEncoder.ToBytes(
                     RpceStubHelper.GetPlatform(),
                    NrpcRpcStubFormatString.TypeFormatString,
                    new RpceStubExprEval[] { new RpceStubExprEval(logon__NETLOGON_DELTA_USERExprEval_0000) },
                    NrpcRpcStubFormatString.ProcFormatString,
                    NrpcRpcStubFormatString.ProcFormatStringOffsetTable[opnum],
                    true,
                    paramList);

            rpceClientTransport.Call(opnum, requestStub, rpceTimeout, out responseStub);

            using (RpceInt3264Collection outParamList = RpceStubDecoder.ToParamList(
                     RpceStubHelper.GetPlatform(),
                    NrpcRpcStubFormatString.TypeFormatString,
                    new RpceStubExprEval[] { new RpceStubExprEval(logon__NETLOGON_DELTA_USERExprEval_0000) },
                    NrpcRpcStubFormatString.ProcFormatString,
                    NrpcRpcStubFormatString.ProcFormatStringOffsetTable[opnum],
                    true,
                    responseStub,
                    paramList))
            {
                IntPtr pValidationInformation = outParamList[3];
                pValidationInformation = Marshal.ReadIntPtr(pValidationInformation);
                ValidationInformation = TypeMarshal.ToNullableStruct<_NETLOGON_VALIDATION_UAS_INFO>(pValidationInformation);

                retVal = outParamList[4].ToInt32();
            }

            pServerName.Dispose();
            pUserName.Dispose();
            pWorkstation.Dispose();

            return (NetApiStatus)retVal;
        }
 /// <summary>
 ///  NetrLogonUasLogon IDL method. Opnum: 0 
 /// </summary>
 /// <param name="serverName">
 ///  ServerName parameter.
 /// </param>
 /// <param name="userName">
 ///  UserName parameter.
 /// </param>
 /// <param name="workstation">
 ///  Workstation parameter.
 /// </param>
 /// <param name="validationInformation">
 ///  ValidationInformation parameter.
 /// </param>
 /// <returns>
 /// The method returns 0x00000000 on success; 
 /// otherwise, it returns a nonzero error code.
 /// </returns>
 public NetApiStatus NetrLogonUasLogon(
     string serverName,
     string userName,
     string workstation,
     out _NETLOGON_VALIDATION_UAS_INFO? validationInformation)
 {
     return rpc.NetrLogonUasLogon(
         serverName,
         userName,
         workstation,
         out validationInformation);
 }