public static ACCESS_MASK TranslateAccessMask(ACCESS_MASK accessMask, LsaMethodOpnums opnum)
        {
            switch (opnum)
            {
            case LsaMethodOpnums.LsarOpenPolicy:
            case LsaMethodOpnums.LsarOpenPolicy2:
                accessMask = TranslateAccessMaskForPolicy(accessMask);
                break;

            case LsaMethodOpnums.LsarCreateAccount:
            case LsaMethodOpnums.LsarOpenAccount:
                accessMask = TranslateAccessMaskForAccount(accessMask);
                break;

            case LsaMethodOpnums.LsarCreateSecret:
            case LsaMethodOpnums.LsarOpenSecret:
                accessMask = TranslateAccessMaskForSecret(accessMask);
                break;

            case LsaMethodOpnums.LsarCreateTrustedDomain:
            case LsaMethodOpnums.LsarCreateTrustedDomainEx:
            case LsaMethodOpnums.LsarCreateTrustedDomainEx2:
            case LsaMethodOpnums.LsarOpenTrustedDomain:
            case LsaMethodOpnums.LsarOpenTrustedDomainByName:
                accessMask = TranslateAccessMaskForTrustedDomain(accessMask);
                break;
            }
            return(accessMask);
        }
        internal static LsaRequestStub CreateLsaRequestStub(LsaMethodOpnums opnum)
        {
            LsaRequestStub requestStub = null;

            switch (opnum)
            {
            case LsaMethodOpnums.LsarClose:
                requestStub = new LsarCloseRequest();
                break;

            case LsaMethodOpnums.Opnum1NotUsedOnWire:
                requestStub = new Opnum1NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarEnumeratePrivileges:
                requestStub = new LsarEnumeratePrivilegesRequest();
                break;

            case LsaMethodOpnums.LsarQuerySecurityObject:
                requestStub = new LsarQuerySecurityObjectRequest();
                break;

            case LsaMethodOpnums.LsarSetSecurityObject:
                requestStub = new LsarSetSecurityObjectRequest();
                break;

            case LsaMethodOpnums.Opnum5NotUsedOnWire:
                requestStub = new Opnum5NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarOpenPolicy:
                requestStub = new LsarOpenPolicyRequest();
                break;

            case LsaMethodOpnums.LsarQueryInformationPolicy:
                requestStub = new LsarQueryInformationPolicyRequest();
                break;

            case LsaMethodOpnums.LsarSetInformationPolicy:
                requestStub = new LsarSetInformationPolicyRequest();
                break;

            case LsaMethodOpnums.Opnum9NotUsedOnWire:
                requestStub = new Opnum9NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarCreateAccount:
                requestStub = new LsarCreateAccountRequest();
                break;

            case LsaMethodOpnums.LsarEnumerateAccounts:
                requestStub = new LsarEnumerateAccountsRequest();
                break;

            case LsaMethodOpnums.LsarCreateTrustedDomain:
                requestStub = new LsarCreateTrustedDomainRequest();
                break;

            case LsaMethodOpnums.LsarEnumerateTrustedDomains:
                requestStub = new LsarEnumerateTrustedDomainsRequest();
                break;

            case LsaMethodOpnums.LsarLookupNames:
                requestStub = new LsarLookupNamesRequest();
                break;

            case LsaMethodOpnums.LsarLookupSids:
                requestStub = new LsarLookupSidsRequest();
                break;

            case LsaMethodOpnums.LsarCreateSecret:
                requestStub = new LsarCreateSecretRequest();
                break;

            case LsaMethodOpnums.LsarOpenAccount:
                requestStub = new LsarOpenAccountRequest();
                break;

            case LsaMethodOpnums.LsarEnumeratePrivilegesAccount:
                requestStub = new LsarEnumeratePrivilegesAccountRequest();
                break;

            case LsaMethodOpnums.LsarAddPrivilegesToAccount:
                requestStub = new LsarAddPrivilegesToAccountRequest();
                break;

            case LsaMethodOpnums.LsarRemovePrivilegesFromAccount:
                requestStub = new LsarRemovePrivilegesFromAccountRequest();
                break;

            case LsaMethodOpnums.Opnum21NotUsedOnWire:
                requestStub = new Opnum21NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum22NotUsedOnWire:
                requestStub = new Opnum22NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarGetSystemAccessAccount:
                requestStub = new LsarGetSystemAccessAccountRequest();
                break;

            case LsaMethodOpnums.LsarSetSystemAccessAccount:
                requestStub = new LsarSetSystemAccessAccountRequest();
                break;

            case LsaMethodOpnums.LsarOpenTrustedDomain:
                requestStub = new LsarOpenTrustedDomainRequest();
                break;

            case LsaMethodOpnums.LsarQueryInfoTrustedDomain:
                requestStub = new LsarQueryInfoTrustedDomainRequest();
                break;

            case LsaMethodOpnums.LsarSetInformationTrustedDomain:
                requestStub = new LsarSetInformationTrustedDomainRequest();
                break;

            case LsaMethodOpnums.LsarOpenSecret:
                requestStub = new LsarOpenSecretRequest();
                break;

            case LsaMethodOpnums.LsarSetSecret:
                requestStub = new LsarSetSecretRequest();
                break;

            case LsaMethodOpnums.LsarQuerySecret:
                requestStub = new LsarQuerySecretRequest();
                break;

            case LsaMethodOpnums.LsarLookupPrivilegeValue:
                requestStub = new LsarLookupPrivilegeValueRequest();
                break;

            case LsaMethodOpnums.LsarLookupPrivilegeName:
                requestStub = new LsarLookupPrivilegeNameRequest();
                break;

            case LsaMethodOpnums.LsarLookupPrivilegeDisplayName:
                requestStub = new LsarLookupPrivilegeDisplayNameRequest();
                break;

            case LsaMethodOpnums.LsarDeleteObject:
                requestStub = new LsarDeleteObjectRequest();
                break;

            case LsaMethodOpnums.LsarEnumerateAccountsWithUserRight:
                requestStub = new LsarEnumerateAccountsWithUserRightRequest();
                break;

            case LsaMethodOpnums.LsarEnumerateAccountRights:
                requestStub = new LsarEnumerateAccountRightsRequest();
                break;

            case LsaMethodOpnums.LsarAddAccountRights:
                requestStub = new LsarAddAccountRightsRequest();
                break;

            case LsaMethodOpnums.LsarRemoveAccountRights:
                requestStub = new LsarRemoveAccountRightsRequest();
                break;

            case LsaMethodOpnums.LsarQueryTrustedDomainInfo:
                requestStub = new LsarQueryTrustedDomainInfoRequest();
                break;

            case LsaMethodOpnums.LsarSetTrustedDomainInfo:
                requestStub = new LsarSetTrustedDomainInfoRequest();
                break;

            case LsaMethodOpnums.LsarDeleteTrustedDomain:
                requestStub = new LsarDeleteTrustedDomainRequest();
                break;

            case LsaMethodOpnums.LsarStorePrivateData:
                requestStub = new LsarStorePrivateDataRequest();
                break;

            case LsaMethodOpnums.LsarRetrievePrivateData:
                requestStub = new LsarRetrievePrivateDataRequest();
                break;

            case LsaMethodOpnums.LsarOpenPolicy2:
                requestStub = new LsarOpenPolicy2Request();
                break;

            case LsaMethodOpnums.LsarGetUserName:
                requestStub = new LsarGetUserNameRequest();
                break;

            case LsaMethodOpnums.LsarQueryInformationPolicy2:
                requestStub = new LsarQueryInformationPolicy2Request();
                break;

            case LsaMethodOpnums.LsarSetInformationPolicy2:
                requestStub = new LsarSetInformationPolicy2Request();
                break;

            case LsaMethodOpnums.LsarQueryTrustedDomainInfoByName:
                requestStub = new LsarQueryTrustedDomainInfoByNameRequest();
                break;

            case LsaMethodOpnums.LsarSetTrustedDomainInfoByName:
                requestStub = new LsarSetTrustedDomainInfoByNameRequest();
                break;

            case LsaMethodOpnums.LsarEnumerateTrustedDomainsEx:
                requestStub = new LsarEnumerateTrustedDomainsExRequest();
                break;

            case LsaMethodOpnums.LsarCreateTrustedDomainEx:
                requestStub = new LsarCreateTrustedDomainExRequest();
                break;

            case LsaMethodOpnums.Opnum52NotUsedOnWire:
                requestStub = new Opnum52NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarQueryDomainInformationPolicy:
                requestStub = new LsarQueryDomainInformationPolicyRequest();
                break;

            case LsaMethodOpnums.LsarSetDomainInformationPolicy:
                requestStub = new LsarSetDomainInformationPolicyRequest();
                break;

            case LsaMethodOpnums.LsarOpenTrustedDomainByName:
                requestStub = new LsarOpenTrustedDomainByNameRequest();
                break;

            case LsaMethodOpnums.Opnum56NotUsedOnWire:
                requestStub = new Opnum56NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarLookupSids2:
                requestStub = new LsarLookupSids2Request();
                break;

            case LsaMethodOpnums.LsarLookupNames2:
                requestStub = new LsarLookupNames2Request();
                break;

            case LsaMethodOpnums.LsarCreateTrustedDomainEx2:
                requestStub = new LsarCreateTrustedDomainEx2Request();
                break;

            case LsaMethodOpnums.Opnum60NotUsedOnWire:
                requestStub = new Opnum60NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum61NotUsedOnWire:
                requestStub = new Opnum61NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum62NotUsedOnWire:
                requestStub = new Opnum62NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum63NotUsedOnWire:
                requestStub = new Opnum63NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum64NotUsedOnWire:
                requestStub = new Opnum64NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum65NotUsedOnWire:
                requestStub = new Opnum65NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum66NotUsedOnWire:
                requestStub = new Opnum66NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum67NotUsedOnWire:
                requestStub = new Opnum67NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarLookupNames3:
                requestStub = new LsarLookupNames3Request();
                break;

            case LsaMethodOpnums.Opnum69NotUsedOnWire:
                requestStub = new Opnum69NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum70NotUsedOnWire:
                requestStub = new Opnum70NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum71NotUsedOnWire:
                requestStub = new Opnum71NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.Opnum72NotUsedOnWire:
                requestStub = new Opnum72NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarQueryForestTrustInformation:
                requestStub = new LsarQueryForestTrustInformationRequest();
                break;

            case LsaMethodOpnums.LsarSetForestTrustInformation:
                requestStub = new LsarSetForestTrustInformationRequest();
                break;

            case LsaMethodOpnums.Opnum75NotUsedOnWire:
                requestStub = new Opnum75NotUsedOnWireRequest();
                break;

            case LsaMethodOpnums.LsarLookupSids3:
                requestStub = new LsarLookupSids3Request();
                break;

            case LsaMethodOpnums.LsarLookupNames4:
                requestStub = new LsarLookupNames4Request();
                break;
            }

            return(requestStub);
        }