/// <summary>
 /// encode param list to bytes
 /// </summary>
 /// <param name="paramList">param list</param>
 /// <param name="Opnum">rpc method opnum</param>
 /// <returns>bytes array</returns>
 protected internal byte[] NrpcStubEncodeToBytes(Int3264[] paramList, NrpcMethodOpnums Opnum)
 {
     return RpceStubEncoder.ToBytes(
       RpceStubHelper.GetPlatform(),
         NrpcRpcStubFormatString.TypeFormatString,
         new RpceStubExprEval[] {
             new RpceStubExprEval(NrpcRpcAdapter.logon__NETLOGON_DELTA_USERExprEval_0000) },
         NrpcRpcStubFormatString.ProcFormatString,
         NrpcRpcStubFormatString.ProcFormatStringOffsetTable[(int)Opnum],
         false,
         paramList);
 }
        internal static NrpcRequestStub CreateNrpcRequestStub(NrpcMethodOpnums opnum)
        {
            NrpcRequestStub requestStub = null;
            switch (opnum)
            {
                case NrpcMethodOpnums.NetrLogonUasLogon:
                    requestStub = new NrpcNetrLogonUasLogonRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonUasLogoff:
                    requestStub = new NrpcNetrLogonUasLogoffRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonSamLogon:
                    requestStub = new NrpcNetrLogonSamLogonRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonSamLogoff:
                    requestStub = new NrpcNetrLogonSamLogoffRequest();
                    break;

                case NrpcMethodOpnums.NetrServerReqChallenge:
                    requestStub = new NrpcNetrServerReqChallengeRequest();
                    break;

                case NrpcMethodOpnums.NetrServerAuthenticate:
                    requestStub = new NrpcNetrServerAuthenticateRequest();
                    break;

                case NrpcMethodOpnums.NetrServerPasswordSet:
                    requestStub = new NrpcNetrServerPasswordSetRequest();
                    break;

                case NrpcMethodOpnums.NetrDatabaseDeltas:
                    requestStub = new NrpcNetrDatabaseDeltasRequest();
                    break;

                case NrpcMethodOpnums.NetrDatabaseSync:
                    requestStub = new NrpcNetrDatabaseSyncRequest();
                    break;

                case NrpcMethodOpnums.NetrAccountDeltas:
                    requestStub = new NrpcNetrAccountDeltasRequest();
                    break;

                case NrpcMethodOpnums.NetrAccountSync:
                    requestStub = new NrpcNetrAccountSyncRequest();
                    break;

                case NrpcMethodOpnums.NetrGetDCName:
                    requestStub = new NrpcNetrGetDCNameRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonControl:
                    requestStub = new NrpcNetrLogonControlRequest();
                    break;

                case NrpcMethodOpnums.NetrGetAnyDCName:
                    requestStub = new NrpcNetrGetAnyDCNameRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonControl2:
                    requestStub = new NrpcNetrLogonControl2Request();
                    break;

                case NrpcMethodOpnums.NetrServerAuthenticate2:
                    requestStub = new NrpcNetrServerAuthenticate2Request();
                    break;

                case NrpcMethodOpnums.NetrDatabaseSync2:
                    requestStub = new NrpcNetrDatabaseSync2Request();
                    break;

                case NrpcMethodOpnums.NetrDatabaseRedo:
                    requestStub = new NrpcNetrDatabaseRedoRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonControl2Ex:
                    requestStub = new NrpcNetrLogonControl2ExRequest();
                    break;

                case NrpcMethodOpnums.NetrEnumerateTrustedDomains:
                    requestStub = new NrpcNetrEnumerateTrustedDomainsRequest();
                    break;

                case NrpcMethodOpnums.DsrGetDcName:
                    requestStub = new NrpcDsrGetDcNameRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonGetCapabilities:
                    requestStub = new NrpcNetrLogonGetCapabilitiesRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonSetServiceBits:
                    requestStub = new NrpcNetrLogonSetServiceBitsRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonGetTrustRid:
                    requestStub = new NrpcNetrLogonGetTrustRidRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonComputeServerDigest:
                    requestStub = new NrpcNetrLogonComputeServerDigestRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonComputeClientDigest:
                    requestStub = new NrpcNetrLogonComputeClientDigestRequest();
                    break;

                case NrpcMethodOpnums.NetrServerAuthenticate3:
                    requestStub = new NrpcNetrServerAuthenticate3Request();
                    break;

                case NrpcMethodOpnums.DsrGetDcNameEx:
                    requestStub = new NrpcDsrGetDcNameExRequest();
                    break;

                case NrpcMethodOpnums.DsrGetSiteName:
                    requestStub = new NrpcDsrGetSiteNameRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonGetDomainInfo:
                    requestStub = new NrpcNetrLogonGetDomainInfoRequest();
                    break;

                case NrpcMethodOpnums.NetrServerPasswordSet2:
                    requestStub = new NrpcNetrServerPasswordSet2Request();
                    break;

                case NrpcMethodOpnums.NetrServerPasswordGet:
                    requestStub = new NrpcNetrServerPasswordGetRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonSendToSam:
                    requestStub = new NrpcNetrLogonSendToSamRequest();
                    break;

                case NrpcMethodOpnums.DsrAddressToSiteNamesW:
                    requestStub = new NrpcDsrAddressToSiteNamesWRequest();
                    break;

                case NrpcMethodOpnums.DsrGetDcNameEx2:
                    requestStub = new NrpcDsrGetDcNameEx2Request();
                    break;

                case NrpcMethodOpnums.NetrLogonGetTimeServiceParentDomain:
                    requestStub = new NrpcNetrLogonGetTimeServiceParentDomainRequest();
                    break;

                case NrpcMethodOpnums.NetrEnumerateTrustedDomainsEx:
                    requestStub = new NrpcNetrEnumerateTrustedDomainsExRequest();
                    break;

                case NrpcMethodOpnums.DsrAddressToSiteNamesExW:
                    requestStub = new NrpcDsrAddressToSiteNamesExWRequest();
                    break;

                case NrpcMethodOpnums.DsrGetDcSiteCoverageW:
                    requestStub = new NrpcDsrGetDcSiteCoverageWRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonSamLogonEx:
                    requestStub = new NrpcNetrLogonSamLogonExRequest();
                    break;

                case NrpcMethodOpnums.DsrEnumerateDomainTrusts:
                    requestStub = new NrpcDsrEnumerateDomainTrustsRequest();
                    break;

                case NrpcMethodOpnums.DsrDeregisterDnsHostRecords:
                    requestStub = new NrpcDsrDeregisterDnsHostRecordsRequest();
                    break;

                case NrpcMethodOpnums.NetrServerTrustPasswordsGet:
                    requestStub = new NrpcNetrServerTrustPasswordsGetRequest();
                    break;

                case NrpcMethodOpnums.DsrGetForestTrustInformation:
                    requestStub = new NrpcDsrGetForestTrustInformationRequest();
                    break;

                case NrpcMethodOpnums.NetrGetForestTrustInformation:
                    requestStub = new NrpcNetrGetForestTrustInformationRequest();
                    break;

                case NrpcMethodOpnums.NetrLogonSamLogonWithFlags:
                    requestStub = new NrpcNetrLogonSamLogonWithFlagsRequest();
                    break;

                case NrpcMethodOpnums.NetrServerGetTrustInfo:
                    requestStub = new NrpcNetrServerGetTrustInfoRequest();
                    break;

                case NrpcMethodOpnums.OpnumUnused47:
                    requestStub = new NrpcOpnumUnused47Request();
                    break;

                case NrpcMethodOpnums.DsrUpdateReadOnlyServerDnsRecords:
                    requestStub = new NrpcDsrUpdateReadOnlyServerDnsRecordsRequest();
                    break;

                case NrpcMethodOpnums.NetrChainSetClientAttributes:
                    requestStub = new NrpcNetrChainSetClientAttributesRequest();
                    break;

                default:
                    throw new InvalidOperationException("Unknown opnum encountered");
            };

            return requestStub;
        }