Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
nativeMethods.cs1514 linesDownload Raw Back to security
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4#pragma warning disable 1634, 16915#pragma warning disable 565236 7using System.Runtime.InteropServices;8using System.Security.Cryptography.X509Certificates;9using System.Management.Automation.Internal;10using DWORD = System.UInt32;11using BOOL = System.UInt32;12 13namespace System.Management.Automation.Security14{15    // Crypto API native constants16    internal static partial class NativeConstants17    {18        internal const int CRYPT_OID_INFO_OID_KEY = 1;19        internal const int CRYPT_OID_INFO_NAME_KEY = 2;20        internal const int CRYPT_OID_INFO_CNG_ALGID_KEY = 5;21    }22 23    // Safer native constants24    internal partial class NativeConstants25    {26        /// <Summary>27        /// SAFER_TOKEN_NULL_IF_EQUAL -> 0x00000001.28        /// </Summary>29        public const int SAFER_TOKEN_NULL_IF_EQUAL = 1;30 31        /// <Summary>32        /// SAFER_TOKEN_COMPARE_ONLY -> 0x00000002.33        /// </Summary>34        public const int SAFER_TOKEN_COMPARE_ONLY = 2;35 36        /// <Summary>37        /// SAFER_TOKEN_MAKE_INERT -> 0x00000004.38        /// </Summary>39        public const int SAFER_TOKEN_MAKE_INERT = 4;40 41        /// <Summary>42        /// SAFER_CRITERIA_IMAGEPATH -> 0x00001.43        /// </Summary>44        public const int SAFER_CRITERIA_IMAGEPATH = 1;45 46        /// <Summary>47        /// SAFER_CRITERIA_NOSIGNEDHASH -> 0x00002.48        /// </Summary>49        public const int SAFER_CRITERIA_NOSIGNEDHASH = 2;50 51        /// <Summary>52        /// SAFER_CRITERIA_IMAGEHASH -> 0x00004.53        /// </Summary>54        public const int SAFER_CRITERIA_IMAGEHASH = 4;55 56        /// <Summary>57        /// SAFER_CRITERIA_AUTHENTICODE -> 0x00008.58        /// </Summary>59        public const int SAFER_CRITERIA_AUTHENTICODE = 8;60 61        /// <Summary>62        /// SAFER_CRITERIA_URLZONE -> 0x00010.63        /// </Summary>64        public const int SAFER_CRITERIA_URLZONE = 16;65 66        /// <Summary>67        /// SAFER_CRITERIA_IMAGEPATH_NT -> 0x01000.68        /// </Summary>69        public const int SAFER_CRITERIA_IMAGEPATH_NT = 4096;70 71        /// <Summary>72        /// WTD_UI_NONE -> 0x00002.73        /// </Summary>74        public const int WTD_UI_NONE = 2;75 76        /// <Summary>77        /// S_OK -> ((HRESULT)0L)78        /// </Summary>79        public const int S_OK = 0;80 81        /// <Summary>82        /// S_FALSE -> ((HRESULT)1L)83        /// </Summary>84        public const int S_FALSE = 1;85 86        /// <Summary>87        /// ERROR_MORE_DATA -> 234L.88        /// </Summary>89        public const int ERROR_MORE_DATA = 234;90 91        /// <Summary>92        /// ERROR_ACCESS_DISABLED_BY_POLICY -> 1260L.93        /// </Summary>94        public const int ERROR_ACCESS_DISABLED_BY_POLICY = 1260;95 96        /// <Summary>97        /// ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY -> 786L.98        /// </Summary>99        public const int ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY = 786;100 101        /// <Summary>102        /// SAFER_MAX_HASH_SIZE -> 64.103        /// </Summary>104        public const int SAFER_MAX_HASH_SIZE = 64;105 106        /// <Summary>107        /// SRP_POLICY_SCRIPT -> L"SCRIPT"108        /// </Summary>109        public const string SRP_POLICY_SCRIPT = "SCRIPT";110 111        /// <Summary>112        /// SIGNATURE_DISPLAYNAME_LENGTH -> MAX_PATH.113        /// </Summary>114        internal const int SIGNATURE_DISPLAYNAME_LENGTH = NativeConstants.MAX_PATH;115 116        /// <Summary>117        /// SIGNATURE_PUBLISHER_LENGTH -> 128.118        /// </Summary>119        internal const int SIGNATURE_PUBLISHER_LENGTH = 128;120 121        /// <Summary>122        /// SIGNATURE_HASH_LENGTH -> 64.123        /// </Summary>124        internal const int SIGNATURE_HASH_LENGTH = 64;125 126        /// <Summary>127        /// MAX_PATH -> 260.128        /// </Summary>129        internal const int MAX_PATH = 260;130 131        /// <Summary>132        /// This function is not supported on this system.133        /// </Summary>134        internal const int FUNCTION_NOT_SUPPORTED = 120;135    }136 137    /// <summary>138    /// Pinvoke methods from crypt32.dll.139    /// </summary>140    internal static partial class NativeMethods141    {142        // -------------------------------------------------------------------143        // crypt32.dll stuff144        //145 146        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]147        internal static extern148        bool CertEnumSystemStore(CertStoreFlags Flags,149                                 IntPtr notUsed1,150                                 IntPtr notUsed2,151                                 CertEnumSystemStoreCallBackProto fn);152 153        /// <summary>154        /// Signature of call back function used by CertEnumSystemStore.155        /// </summary>156        internal delegate157        bool CertEnumSystemStoreCallBackProto([MarshalAs(UnmanagedType.LPWStr)]158                                               string storeName,159                                               DWORD dwFlagsNotUsed,160                                               IntPtr notUsed1,161                                               IntPtr notUsed2,162                                               IntPtr notUsed3);163 164        /// <summary>165        /// Signature of cert enumeration function.166        /// </summary>167        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]168        internal static extern169        IntPtr CertEnumCertificatesInStore(IntPtr storeHandle,170                                            IntPtr certContext);171 172        /// <summary>173        /// Signature of cert find function.174        /// </summary>175        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]176        internal static extern177        IntPtr CertFindCertificateInStore(178            IntPtr hCertStore,179            Security.NativeMethods.CertOpenStoreEncodingType dwEncodingType,180            DWORD dwFindFlags,                  // 0181            Security.NativeMethods.CertFindType dwFindType,182            [MarshalAs(UnmanagedType.LPWStr)] string pvFindPara,183            IntPtr notUsed1);                   // pPrevCertContext184 185        [Flags]186        internal enum CertFindType187        {                                                       // pvFindPara:188            CERT_COMPARE_ANY = 0 << 16,         // null189            CERT_FIND_ISSUER_STR = (8 << 16) | 4,   // substring190            CERT_FIND_SUBJECT_STR = (8 << 16) | 7,   // substring191            CERT_FIND_CROSS_CERT_DIST_POINTS = 17 << 16,        // null192            CERT_FIND_SUBJECT_INFO_ACCESS = 19 << 16,        // null193            CERT_FIND_HASH_STR = 20 << 16,        // thumbprint194        }195 196        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]197        internal static extern198        bool CertCloseStore(IntPtr hCertStore, int dwFlags);199 200        [Flags]201        internal enum CertStoreFlags202        {203            CERT_SYSTEM_STORE_CURRENT_USER = 1 << 16,204            CERT_SYSTEM_STORE_LOCAL_MACHINE = 2 << 16,205            CERT_SYSTEM_STORE_CURRENT_SERVICE = 4 << 16,206            CERT_SYSTEM_STORE_SERVICES = 5 << 16,207            CERT_SYSTEM_STORE_USERS = 6 << 16,208            CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 7 << 16,209            CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 8 << 16,210            CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 9 << 16,211        }212 213        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]214        internal static extern215        bool CertGetEnhancedKeyUsage(IntPtr pCertContext, // PCCERT_CONTEXT216                                      DWORD dwFlags,217                                      IntPtr pUsage,       // PCERT_ENHKEY_USAGE218                                      out int pcbUsage);  // DWORD*219 220        [DllImport("Crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]221        internal static extern222        IntPtr CertOpenStore(CertOpenStoreProvider storeProvider,223                              CertOpenStoreEncodingType dwEncodingType,224                              IntPtr notUsed1,          // hCryptProv225                              CertOpenStoreFlags dwFlags,226                              [MarshalAs(UnmanagedType.LPWStr)]227                              string storeName);228 229        [Flags]230        internal enum CertOpenStoreFlags231        {232            CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001,233            CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002,234            CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004,235            CERT_STORE_DELETE_FLAG = 0x00000010,236            CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020,237            CERT_STORE_SHARE_STORE_FLAG = 0x00000040,238            CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080,239            CERT_STORE_MANIFOLD_FLAG = 0x00000100,240            CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200,241            CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400,242            CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800,243            CERT_STORE_READONLY_FLAG = 0x00008000,244            CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000,245            CERT_STORE_CREATE_NEW_FLAG = 0x00002000,246            CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000,247 248            CERT_SYSTEM_STORE_CURRENT_USER = 1 << 16,249            CERT_SYSTEM_STORE_LOCAL_MACHINE = 2 << 16,250            CERT_SYSTEM_STORE_CURRENT_SERVICE = 4 << 16,251            CERT_SYSTEM_STORE_SERVICES = 5 << 16,252            CERT_SYSTEM_STORE_USERS = 6 << 16,253            CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 7 << 16,254            CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 8 << 16,255            CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 9 << 16,256        }257 258        [Flags]259        internal enum CertOpenStoreProvider260        {261            CERT_STORE_PROV_MEMORY = 2,262            CERT_STORE_PROV_SYSTEM = 10,263            CERT_STORE_PROV_SYSTEM_REGISTRY = 13,264        }265 266        [Flags]267        internal enum CertOpenStoreEncodingType268        {269            X509_ASN_ENCODING = 0x00000001,270        }271 272        [DllImport("Crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]273        internal static extern274        bool CertControlStore(275                        IntPtr hCertStore,276                        DWORD dwFlags,277                        CertControlStoreType dwCtrlType,278                        IntPtr pvCtrlPara);279 280        [Flags]281        internal enum CertControlStoreType : uint282        {283            CERT_STORE_CTRL_RESYNC = 1,284            CERT_STORE_CTRL_COMMIT = 3,285            CERT_STORE_CTRL_AUTO_RESYNC = 4,286        }287 288        [Flags]289        internal enum AddCertificateContext : uint290        {291            CERT_STORE_ADD_NEW = 1,292            CERT_STORE_ADD_USE_EXISTING = 2,293            CERT_STORE_ADD_REPLACE_EXISTING = 3,294            CERT_STORE_ADD_ALWAYS = 4,295            CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5,296            CERT_STORE_ADD_NEWER = 6,297            CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7298        }299 300        [Flags]301        internal enum CertPropertyId302        {303            CERT_KEY_PROV_HANDLE_PROP_ID = 1,304            CERT_KEY_PROV_INFO_PROP_ID = 2,   // CRYPT_KEY_PROV_INFO305            CERT_SHA1_HASH_PROP_ID = 3,306            CERT_MD5_HASH_PROP_ID = 4,307            CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID = 102,308        }309 310        [Flags]311        internal enum NCryptDeletKeyFlag312        {313            NCRYPT_MACHINE_KEY_FLAG = 0x00000020,  // same as CAPI CRYPT_MACHINE_KEYSET314            NCRYPT_SILENT_FLAG = 0x00000040,  // same as CAPI CRYPT_SILENT315        }316 317        [Flags]318        internal enum ProviderFlagsEnum : uint319        {320            CRYPT_VERIFYCONTEXT = 0xF0000000,321            CRYPT_NEWKEYSET = 0x00000008,322            CRYPT_DELETEKEYSET = 0x00000010,323            CRYPT_MACHINE_KEYSET = 0x00000020,324            CRYPT_SILENT = 0x00000040,325        }326 327        internal enum ProviderParam : int328        {329            PP_CLIENT_HWND = 1,330        }331 332        internal enum PROV : uint333        {334            /// <summary>335            /// The PROV_RSA_FULL type.336            /// </summary>337            RSA_FULL = 1,338 339            /// <summary>340            /// The PROV_RSA_SIG type.341            /// </summary>342            RSA_SIG = 2,343 344            /// <summary>345            /// The PROV_RSA_DSS type.346            /// </summary>347            DSS = 3,348 349            /// <summary>350            /// The PROV_FORTEZZA type.351            /// </summary>352            FORTEZZA = 4,353 354            /// <summary>355            /// The PROV_MS_EXCHANGE type.356            /// </summary>357            MS_EXCHANGE = 5,358 359            /// <summary>360            /// The PROV_SSL type.361            /// </summary>362            SSL = 6,363 364            /// <summary>365            /// The PROV_RSA_SCHANNEL type. SSL certificates are generated with these providers.366            /// </summary>367            RSA_SCHANNEL = 12,368 369            /// <summary>370            /// The PROV_DSS_DH type.371            /// </summary>372            DSS_DH = 13,373 374            /// <summary>375            /// The PROV_EC_ECDSA type.376            /// </summary>377            EC_ECDSA_SIG = 14,378 379            /// <summary>380            /// The PROV_EC_ECNRA_SIG type.381            /// </summary>382            EC_ECNRA_SIG = 15,383 384            /// <summary>385            /// The PROV_EC_ECDSA_FULL type.386            /// </summary>387            EC_ECDSA_FULL = 16,388 389            /// <summary>390            /// The PROV_EC_ECNRA_FULL type.391            /// </summary>392            EC_ECNRA_FULL = 17,393 394            /// <summary>395            /// The PROV_DH_SCHANNEL type.396            /// </summary>397            DH_SCHANNEL = 18,398 399            /// <summary>400            /// The PROV_SPYRUS_LYNKS type.401            /// </summary>402            SPYRUS_LYNKS = 20,403 404            /// <summary>405            /// The PROV_RNG type.406            /// </summary>407            RNG = 21,408 409            /// <summary>410            /// The PROV_INTEL_SEC type.411            /// </summary>412            INTEL_SEC = 22413        }414 415        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]416        internal struct CRYPT_KEY_PROV_INFO417        {418            /// <summary>419            /// String naming a key container within a particular CSP.420            /// </summary>421            public string pwszContainerName;422 423            /// <summary>424            /// String that names a CSP.425            /// </summary>426            public string pwszProvName;427 428            /// <summary>429            /// CSP type.430            /// </summary>431            public PROV dwProvType;432 433            /// <summary>434            /// Flags value indicating whether a key container is to be created or destroyed, and435            /// whether an application is allowed access to a key container.436            /// </summary>437            public uint dwFlags;438 439            /// <summary>440            /// Number of elements in the rgProvParam array.441            /// </summary>442            public uint cProvParam;443 444            /// <summary>445            /// Array of pointers to CRYPT_KEY_PROV_PARAM structures.446            /// </summary>447            public IntPtr rgProvParam;448 449            /// <summary>450            /// The specification of the private key to retrieve. AT_KEYEXCHANGE and AT_SIGNATURE451            /// are defined for the default provider.452            /// </summary>453            public uint dwKeySpec;454        }455 456        internal const string NCRYPT_WINDOW_HANDLE_PROPERTY = "HWND Handle";457 458        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]459        internal static extern460        bool CertDeleteCertificateFromStore(IntPtr pCertContext);461 462        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]463        internal static extern464        IntPtr CertDuplicateCertificateContext(IntPtr pCertContext);465 466        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]467        internal static extern468        bool CertAddCertificateContextToStore(IntPtr hCertStore,469                                              IntPtr pCertContext,470                                              DWORD dwAddDisposition,471                                              ref IntPtr ppStoreContext);472 473        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]474        internal static extern475        bool CertFreeCertificateContext(IntPtr certContext);476 477        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]478        internal static extern479        bool CertGetCertificateContextProperty(IntPtr pCertContext,480                                               CertPropertyId dwPropId,481                                               IntPtr pvData,482                                               ref int pcbData);483 484        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]485        internal static extern486        bool CertSetCertificateContextProperty(IntPtr pCertContext,487                                               CertPropertyId dwPropId,488                                               DWORD dwFlags,489                                               IntPtr pvData);490 491        [DllImport("crypt32.dll", SetLastError = true, CharSet = CharSet.Unicode)]492        internal static extern493        IntPtr CryptFindLocalizedName(string pwszCryptName);494 495        [DllImport(PinvokeDllNames.CryptAcquireContextDllName, SetLastError = true, CharSet = CharSet.Unicode)]496        internal static extern497        bool CryptAcquireContext(ref IntPtr hProv,498                                 string strContainerName,499                                 string strProviderName,500                                 int nProviderType,501                                 uint uiProviderFlags);502 503        [DllImport(PinvokeDllNames.CryptReleaseContextDllName, SetLastError = true, CharSet = CharSet.Unicode)]504        internal static extern505        bool CryptReleaseContext(IntPtr hProv, int dwFlags);506 507        [DllImport(PinvokeDllNames.CryptSetProvParamDllName, SetLastError = true)]508        internal static extern unsafe509        bool CryptSetProvParam(IntPtr hProv, ProviderParam dwParam, void* pbData, int dwFlags);510 511        [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]512        internal static extern513        int NCryptOpenStorageProvider(ref IntPtr hProv,514                                      string strProviderName,515                                      uint dwFlags);516 517        [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]518        internal static extern519        int NCryptOpenKey(IntPtr hProv,520                          ref IntPtr hKey,521                          string strKeyName,522                          uint dwLegacySpec,523                          uint dwFlags);524 525        [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]526        internal static extern unsafe527        int NCryptSetProperty(IntPtr hProv, string pszProperty, void* pbInput, int cbInput, int dwFlags);528 529        [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]530        internal static extern531        int NCryptDeleteKey(IntPtr hKey,532                            uint dwFlags);533 534        [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)]535        internal static extern536        int NCryptFreeObject(IntPtr hObject);537 538        // -----------------------------------------------------------------539        // cryptUI.dll stuff540        //541 542        //543        // CryptUIWizDigitalSign() function and associated structures/enums544        //545 546        [DllImport("cryptUI.dll", SetLastError = true, CharSet = CharSet.Unicode)]547        internal static extern548        bool CryptUIWizDigitalSign(DWORD dwFlags,549                                   IntPtr hwndParentNotUsed,550                                   IntPtr pwszWizardTitleNotUsed,551                                   IntPtr pDigitalSignInfo,552                                   IntPtr ppSignContextNotUsed);553 554        [Flags]555        internal enum CryptUIFlags556        {557            CRYPTUI_WIZ_NO_UI = 0x0001558            // other flags not used559        }560 561        [StructLayout(LayoutKind.Sequential)]562        internal struct CRYPTUI_WIZ_DIGITAL_SIGN_INFO563        {564            internal DWORD dwSize;565            internal DWORD dwSubjectChoice;566 567            [MarshalAs(UnmanagedType.LPWStr)]568            internal string pwszFileName;569 570            internal DWORD dwSigningCertChoice;571            internal IntPtr pSigningCertContext; // PCCERT_CONTEXT572 573            [MarshalAs(UnmanagedType.LPWStr)]574            internal string pwszTimestampURL;575 576            internal DWORD dwAdditionalCertChoice;577            internal IntPtr pSignExtInfo; // PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO578        }579 580        [Flags]581        internal enum SignInfoSubjectChoice582        {583            CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE = 0x01584            // CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_BLOB = 0x02 NotUsed585        }586 587        [Flags]588        internal enum SignInfoCertChoice589        {590            CRYPTUI_WIZ_DIGITAL_SIGN_CERT = 0x01591            // CRYPTUI_WIZ_DIGITAL_SIGN_STORE = 0x02, NotUsed592            // CRYPTUI_WIZ_DIGITAL_SIGN_PVK = 0x03, NotUsed593        }594 595        [Flags]596        internal enum SignInfoAdditionalCertChoice597        {598            CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN = 1,599            CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT = 2600        }601 602        [StructLayout(LayoutKind.Sequential)]603        internal struct CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO604        {605            internal DWORD dwSize;606            internal DWORD dwAttrFlagsNotUsed;607 608            [MarshalAs(UnmanagedType.LPWStr)]609            internal string pwszDescription;610 611            [MarshalAs(UnmanagedType.LPWStr)]612            internal string pwszMoreInfoLocation;613 614            [MarshalAs(UnmanagedType.LPStr)]615            internal string pszHashAlg;616 617            internal IntPtr pwszSigningCertDisplayStringNotUsed; // LPCWSTR618            internal IntPtr hAdditionalCertStoreNotUsed; // HCERTSTORE619            internal IntPtr psAuthenticatedNotUsed;      // PCRYPT_ATTRIBUTES620            internal IntPtr psUnauthenticatedNotUsed;    // PCRYPT_ATTRIBUTES621        }622 623        internal static CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO624            InitSignInfoExtendedStruct(string description,625                                       string moreInfoUrl,626                                       string hashAlgorithm)627        {628            CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO siex =629                new CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO();630 631            siex.dwSize = (DWORD)Marshal.SizeOf(siex);632            siex.dwAttrFlagsNotUsed = 0;633            siex.pwszDescription = description;634            siex.pwszMoreInfoLocation = moreInfoUrl;635            siex.pszHashAlg = null;636            siex.pwszSigningCertDisplayStringNotUsed = IntPtr.Zero;637            siex.hAdditionalCertStoreNotUsed = IntPtr.Zero;638            siex.psAuthenticatedNotUsed = IntPtr.Zero;639            siex.psUnauthenticatedNotUsed = IntPtr.Zero;640 641            if (hashAlgorithm != null)642            {643                siex.pszHashAlg = hashAlgorithm;644            }645 646            return siex;647        }648 649        [StructLayout(LayoutKind.Sequential)]650        internal struct CRYPT_OID_INFO651        {652            /// DWORD->unsigned int653            public uint cbSize;654 655            /// LPCSTR->CHAR*656            [MarshalAs(UnmanagedType.LPStr)]657            public string pszOID;658 659            /// LPCWSTR->WCHAR*660            [MarshalAs(UnmanagedType.LPWStr)]661            public string pwszName;662 663            /// DWORD->unsigned int664            public uint dwGroupId;665 666            /// Anonymous_a3ae7823_8a1d_432c_bc07_a72b6fc6c7d8667            public Anonymous_a3ae7823_8a1d_432c_bc07_a72b6fc6c7d8 Union1;668 669            /// CRYPT_DATA_BLOB->_CRYPTOAPI_BLOB670            public CRYPT_ATTR_BLOB ExtraInfo;671        }672 673        [StructLayout(LayoutKind.Explicit)]674        internal struct Anonymous_a3ae7823_8a1d_432c_bc07_a72b6fc6c7d8675        {676            /// DWORD->unsigned int677            [FieldOffset(0)]678            public uint dwValue;679 680            /// ALG_ID->unsigned int681            [FieldOffset(0)]682            public uint Algid;683 684            /// DWORD->unsigned int685            [FieldOffset(0)]686            public uint dwLength;687        }688 689        [StructLayout(LayoutKind.Sequential)]690        internal struct CRYPT_ATTR_BLOB691        {692            /// DWORD->unsigned int693            public uint cbData;694 695            /// BYTE*696            public System.IntPtr pbData;697        }698 699        [StructLayout(LayoutKind.Sequential)]700        internal struct CRYPT_DATA_BLOB701        {702            /// DWORD->unsigned int703            public uint cbData;704 705            /// BYTE*706            public System.IntPtr pbData;707        }708 709        [StructLayout(LayoutKind.Sequential)]710        internal struct CERT_CONTEXT711        {712            public int dwCertEncodingType;713            public IntPtr pbCertEncoded;714            public int cbCertEncoded;715            public IntPtr pCertInfo;716            public IntPtr hCertStore;717        }718 719        // Return the OID info for a given algorithm720        [DllImport("crypt32.dll", EntryPoint = "CryptFindOIDInfo")]721        internal static extern IntPtr CryptFindOIDInfo(722            uint dwKeyType,723            System.IntPtr pvKey,724            uint dwGroupId);725 726        internal static DWORD GetCertChoiceFromSigningOption(727            SigningOption option)728        {729            DWORD cc = 0;730 731            switch (option)732            {733                case SigningOption.AddOnlyCertificate:734                    cc = 0;735                    break;736 737                case SigningOption.AddFullCertificateChain:738                    cc = (DWORD)SignInfoAdditionalCertChoice.CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN;739                    break;740 741                case SigningOption.AddFullCertificateChainExceptRoot:742                    cc = (DWORD)SignInfoAdditionalCertChoice.CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT;743                    break;744 745                default:746                    cc = (DWORD)SignInfoAdditionalCertChoice.CRYPTUI_WIZ_DIGITAL_SIGN_ADD_CHAIN_NO_ROOT;747                    break;748            }749 750            return cc;751        }752 753        internal static CRYPTUI_WIZ_DIGITAL_SIGN_INFO754            InitSignInfoStruct(string fileName,755                               X509Certificate2 signingCert,756                               string timeStampServerUrl,757                               string hashAlgorithm,758                               SigningOption option)759        {760            CRYPTUI_WIZ_DIGITAL_SIGN_INFO si = new CRYPTUI_WIZ_DIGITAL_SIGN_INFO();761 762            si.dwSize = (DWORD)Marshal.SizeOf(si);763            si.dwSubjectChoice = (DWORD)SignInfoSubjectChoice.CRYPTUI_WIZ_DIGITAL_SIGN_SUBJECT_FILE;764            si.pwszFileName = fileName;765            si.dwSigningCertChoice = (DWORD)SignInfoCertChoice.CRYPTUI_WIZ_DIGITAL_SIGN_CERT;766            si.pSigningCertContext = signingCert.Handle;767            si.pwszTimestampURL = timeStampServerUrl;768            si.dwAdditionalCertChoice = GetCertChoiceFromSigningOption(option);769 770            CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO siex =771                InitSignInfoExtendedStruct(string.Empty, string.Empty, hashAlgorithm);772            IntPtr pSiexBuffer = Marshal.AllocCoTaskMem(Marshal.SizeOf(siex));773            Marshal.StructureToPtr(siex, pSiexBuffer, false);774            si.pSignExtInfo = pSiexBuffer;775 776            return si;777        }778 779        [StructLayout(LayoutKind.Sequential)]780        internal struct CRYPT_PROVIDER_CERT781        {782#pragma warning disable IDE0044783            private DWORD _cbStruct;784#pragma warning restore IDE0044785            internal IntPtr pCert; // PCCERT_CONTEXT786            private readonly BOOL _fCommercial;787            private readonly BOOL _fTrustedRoot;788            private readonly BOOL _fSelfSigned;789            private readonly BOOL _fTestCert;790            private readonly DWORD _dwRevokedReason;791            private readonly DWORD _dwConfidence;792            private readonly DWORD _dwError;793            private readonly IntPtr _pTrustListContext; // CTL_CONTEXT*794            private readonly BOOL _fTrustListSignerCert;795            private readonly IntPtr _pCtlContext; // PCCTL_CONTEXT796            private readonly DWORD _dwCtlError;797            private readonly BOOL _fIsCyclic;798            private readonly IntPtr _pChainElement; // PCERT_CHAIN_ELEMENT799        }800 801        [StructLayout(LayoutKind.Sequential)]802        internal struct CRYPT_PROVIDER_SGNR803        {804            private readonly DWORD _cbStruct;805            private FILETIME _sftVerifyAsOf;806            private readonly DWORD _csCertChain;807            private readonly IntPtr _pasCertChain; // CRYPT_PROVIDER_CERT*808            private readonly DWORD _dwSignerType;809            private readonly IntPtr _psSigner; // CMSG_SIGNER_INFO*810            private readonly DWORD _dwError;811            internal DWORD csCounterSigners;812            internal IntPtr pasCounterSigners; // CRYPT_PROVIDER_SGNR*813            private readonly IntPtr _pChainContext; // PCCERT_CHAIN_CONTEXT814        }815 816        //817        // stuff required for getting cert extensions818        //819 820        [StructLayout(LayoutKind.Sequential)]821        internal struct CERT_ENHKEY_USAGE822        {823            internal DWORD cUsageIdentifier;824            // [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr, SizeParamIndex=0)]825            // internal string[] rgpszUsageIdentifier; // LPSTR*826            internal IntPtr rgpszUsageIdentifier;827        }828 829        internal enum SIGNATURE_STATE830        {831            /// SIGNATURE_STATE_UNSIGNED_MISSING -> 0832            SIGNATURE_STATE_UNSIGNED_MISSING = 0,833 834            SIGNATURE_STATE_UNSIGNED_UNSUPPORTED,835 836            SIGNATURE_STATE_UNSIGNED_POLICY,837 838            SIGNATURE_STATE_INVALID_CORRUPT,839 840            SIGNATURE_STATE_INVALID_POLICY,841 842            SIGNATURE_STATE_VALID,843 844            SIGNATURE_STATE_TRUSTED,845 846            SIGNATURE_STATE_UNTRUSTED,847        }848 849        internal enum SIGNATURE_INFO_FLAGS850        {851            /// SIF_NONE -> 0x0000852            SIF_NONE = 0,853 854            /// SIF_AUTHENTICODE_SIGNED -> 0x0001855            SIF_AUTHENTICODE_SIGNED = 1,856 857            /// SIF_CATALOG_SIGNED -> 0x0002858            SIF_CATALOG_SIGNED = 2,859 860            /// SIF_VERSION_INFO -> 0x0004861            SIF_VERSION_INFO = 4,862 863            /// SIF_CHECK_OS_BINARY -> 0x0800864            SIF_CHECK_OS_BINARY = 2048,865 866            /// SIF_BASE_VERIFICATION -> 0x1000867            SIF_BASE_VERIFICATION = 4096,868 869            /// SIF_CATALOG_FIRST -> 0x2000870            SIF_CATALOG_FIRST = 8192,871 872            /// SIF_MOTW -> 0x4000873            SIF_MOTW = 16384,874        }875 876        internal enum SIGNATURE_INFO_AVAILABILITY877        {878            /// SIA_DISPLAYNAME -> 0x0001879            SIA_DISPLAYNAME = 1,880 881            /// SIA_PUBLISHERNAME -> 0x0002882            SIA_PUBLISHERNAME = 2,883 884            /// SIA_MOREINFOURL -> 0x0004885            SIA_MOREINFOURL = 4,886 887            /// SIA_HASH -> 0x0008888            SIA_HASH = 8,889        }890 891        internal enum SIGNATURE_INFO_TYPE892        {893            /// SIT_UNKNOWN -> 0894            SIT_UNKNOWN = 0,895 896            SIT_AUTHENTICODE,897 898            SIT_CATALOG,899        }900 901        [StructLayout(LayoutKind.Sequential)]902        internal struct SIGNATURE_INFO903        {904            /// DWORD->unsigned int905            internal uint cbSize;906 907            /// SIGNATURE_STATE->Anonymous_7e0526d8_af30_47f9_9233_a77658d0f1e5908            internal SIGNATURE_STATE nSignatureState;909 910            /// SIGNATURE_INFO_TYPE->Anonymous_27075e4b_faa5_4e57_ada0_6d49fae74187911            internal SIGNATURE_INFO_TYPE nSignatureType;912 913            /// DWORD->unsigned int914            internal uint dwSignatureInfoAvailability;915 916            /// DWORD->unsigned int917            internal uint dwInfoAvailability;918 919            /// PWSTR->WCHAR*920            [MarshalAs(UnmanagedType.LPWStr)]921            internal string pszDisplayName;922 923            /// DWORD->unsigned int924            internal uint cchDisplayName;925 926            /// PWSTR->WCHAR*927            [MarshalAs(UnmanagedType.LPWStr)]928            internal string pszPublisherName;929 930            /// DWORD->unsigned int931            internal uint cchPublisherName;932 933            /// PWSTR->WCHAR*934            [MarshalAs(UnmanagedType.LPWStr)]935            internal string pszMoreInfoURL;936 937            /// DWORD->unsigned int938            internal uint cchMoreInfoURL;939 940            /// LPBYTE->BYTE*941            internal System.IntPtr prgbHash;942 943            /// DWORD->unsigned int944            internal uint cbHash;945 946            /// BOOL->int947            internal int fOSBinary;948        }949 950        [StructLayout(LayoutKind.Sequential)]951        internal struct CERT_INFO952        {953            /// DWORD->unsigned int954            internal uint dwVersion;955 956            /// CRYPT_INTEGER_BLOB->_CRYPTOAPI_BLOB957            internal CRYPT_ATTR_BLOB SerialNumber;958 959            /// CRYPT_ALGORITHM_IDENTIFIER->_CRYPT_ALGORITHM_IDENTIFIER960            internal CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;961 962            /// CERT_NAME_BLOB->_CRYPTOAPI_BLOB963            internal CRYPT_ATTR_BLOB Issuer;964 965            /// FILETIME->_FILETIME966            internal FILETIME NotBefore;967 968            /// FILETIME->_FILETIME969            internal FILETIME NotAfter;970 971            /// CERT_NAME_BLOB->_CRYPTOAPI_BLOB972            internal CRYPT_ATTR_BLOB Subject;973 974            /// CERT_PUBLIC_KEY_INFO->_CERT_PUBLIC_KEY_INFO975            internal CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;976 977            /// CRYPT_BIT_BLOB->_CRYPT_BIT_BLOB978            internal CRYPT_BIT_BLOB IssuerUniqueId;979 980            /// CRYPT_BIT_BLOB->_CRYPT_BIT_BLOB981            internal CRYPT_BIT_BLOB SubjectUniqueId;982 983            /// DWORD->unsigned int984            internal uint cExtension;985 986            /// PCERT_EXTENSION->_CERT_EXTENSION*987            internal System.IntPtr rgExtension;988        }989 990        [StructLayout(LayoutKind.Sequential)]991        internal struct CRYPT_ALGORITHM_IDENTIFIER992        {993            /// LPSTR->CHAR*994            [MarshalAs(UnmanagedType.LPStr)]995            internal string pszObjId;996 997            /// CRYPT_OBJID_BLOB->_CRYPTOAPI_BLOB998            internal CRYPT_ATTR_BLOB Parameters;999        }1000 1001        [StructLayout(LayoutKind.Sequential)]1002        internal struct FILETIME1003        {1004            /// DWORD->unsigned int1005            internal uint dwLowDateTime;1006 1007            /// DWORD->unsigned int1008            internal uint dwHighDateTime;1009        }1010 1011        [StructLayout(LayoutKind.Sequential)]1012        internal struct CERT_PUBLIC_KEY_INFO1013        {1014            /// CRYPT_ALGORITHM_IDENTIFIER->_CRYPT_ALGORITHM_IDENTIFIER1015            internal CRYPT_ALGORITHM_IDENTIFIER Algorithm;1016 1017            /// CRYPT_BIT_BLOB->_CRYPT_BIT_BLOB1018            internal CRYPT_BIT_BLOB PublicKey;1019        }1020 1021        [StructLayout(LayoutKind.Sequential)]1022        internal struct CRYPT_BIT_BLOB1023        {1024            /// DWORD->unsigned int1025            internal uint cbData;1026 1027            /// BYTE*1028            internal System.IntPtr pbData;1029 1030            /// DWORD->unsigned int1031            internal uint cUnusedBits;1032        }1033 1034        [StructLayout(LayoutKind.Sequential)]1035        internal struct CERT_EXTENSION1036        {1037            /// LPSTR->CHAR*1038            [MarshalAs(UnmanagedType.LPStr)]1039            internal string pszObjId;1040 1041            /// BOOL->int1042            internal int fCritical;1043 1044            /// CRYPT_OBJID_BLOB->_CRYPTOAPI_BLOB1045            internal CRYPT_ATTR_BLOB Value;1046        }1047    }1048 1049    /// <summary>1050    /// Pinvoke methods from certca.dll.1051    /// </summary>1052    internal static partial class NativeMethods1053    {1054        internal const int CRYPT_E_NOT_FOUND = unchecked((int)0x80092004);1055        internal const int E_INVALID_DATA = unchecked((int)0x8007000d);1056        internal const int NTE_NOT_SUPPORTED = unchecked((int)0x80090029);1057 1058        internal enum AltNameType : uint1059        {1060            CERT_ALT_NAME_OTHER_NAME = 1,1061            CERT_ALT_NAME_RFC822_NAME = 2,1062            CERT_ALT_NAME_DNS_NAME = 3,1063            CERT_ALT_NAME_X400_ADDRESS = 4,1064            CERT_ALT_NAME_DIRECTORY_NAME = 5,1065            CERT_ALT_NAME_EDI_PARTY_NAME = 6,1066            CERT_ALT_NAME_URL = 7,1067            CERT_ALT_NAME_IP_ADDRESS = 8,1068            CERT_ALT_NAME_REGISTERED_ID = 9,1069        }1070 1071        internal enum CryptDecodeFlags : uint1072        {1073            CRYPT_DECODE_ENABLE_PUNYCODE_FLAG = 0x02000000,1074            CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG = 0x04000000,1075            CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG = (CRYPT_DECODE_ENABLE_PUNYCODE_FLAG | CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG),1076        }1077    }1078 1079    #region SAFER_APIs1080 1081    // SAFER native methods1082    internal static partial class NativeMethods1083    {1084        /// Return Type: BOOL->int1085        ///dwNumProperties: DWORD->unsigned int1086        ///pCodeProperties: PSAFER_CODE_PROPERTIES->_SAFER_CODE_PROPERTIES*1087        ///pLevelHandle: SAFER_LEVEL_HANDLE*1088        ///lpReserved: LPVOID->void*1089        [DllImport("advapi32.dll", EntryPoint = "SaferIdentifyLevel", SetLastError = true)]1090        [return: MarshalAs(UnmanagedType.Bool)]1091        internal static extern bool SaferIdentifyLevel(1092            uint dwNumProperties,1093            [In]1094            ref SAFER_CODE_PROPERTIES pCodeProperties,1095            out IntPtr pLevelHandle,1096            [In]1097            [MarshalAs(UnmanagedType.LPWStr)]1098            string bucket);1099 1100        /// Return Type: BOOL->int1101        ///LevelHandle: SAFER_LEVEL_HANDLE->SAFER_LEVEL_HANDLE__*1102        ///InAccessToken: HANDLE->void*1103        ///OutAccessToken: PHANDLE->HANDLE*1104        ///dwFlags: DWORD->unsigned int1105        ///lpReserved: LPVOID->void*1106        [DllImport("advapi32.dll", EntryPoint = "SaferComputeTokenFromLevel", SetLastError = true)]1107        [return: MarshalAs(UnmanagedType.Bool)]1108        internal static extern bool SaferComputeTokenFromLevel(1109            [In]1110            IntPtr LevelHandle,1111            [In]1112            System.IntPtr InAccessToken,1113            ref System.IntPtr OutAccessToken,1114            uint dwFlags,1115            System.IntPtr lpReserved);1116 1117        /// Return Type: BOOL->int1118        ///hLevelHandle: SAFER_LEVEL_HANDLE->SAFER_LEVEL_HANDLE__*1119        [DllImport("advapi32.dll", EntryPoint = "SaferCloseLevel")]1120        [return: MarshalAs(UnmanagedType.Bool)]1121        internal static extern bool SaferCloseLevel([In] IntPtr hLevelHandle);1122 1123        /// Return Type: BOOL->int1124        ///hObject: HANDLE->void*1125        [DllImport(PinvokeDllNames.CloseHandleDllName, EntryPoint = "CloseHandle")]1126        [return: MarshalAs(UnmanagedType.Bool)]1127        internal static extern bool CloseHandle([In] System.IntPtr hObject);1128    }1129 1130    [StructLayout(LayoutKind.Sequential)]1131    internal struct SAFER_CODE_PROPERTIES1132    {1133        /// DWORD->unsigned int1134        public uint cbSize;1135 1136        /// DWORD->unsigned int1137        public uint dwCheckFlags;1138 1139        /// LPCWSTR->WCHAR*1140        [MarshalAs(UnmanagedType.LPWStr)]1141        public string ImagePath;1142 1143        /// HANDLE->void*1144        public System.IntPtr hImageFileHandle;1145 1146        /// DWORD->unsigned int1147        public uint UrlZoneId;1148 1149        /// BYTE[SAFER_MAX_HASH_SIZE]1150        [MarshalAs(1151            UnmanagedType.ByValArray,1152            SizeConst = NativeConstants.SAFER_MAX_HASH_SIZE,1153            ArraySubType = UnmanagedType.I1)]1154        public byte[] ImageHash;1155 1156        /// DWORD->unsigned int1157        public uint dwImageHashSize;1158 1159        /// LARGE_INTEGER->_LARGE_INTEGER1160        public LARGE_INTEGER ImageSize;1161 1162        /// ALG_ID->unsigned int1163        public uint HashAlgorithm;1164 1165        /// LPBYTE->BYTE*1166        public System.IntPtr pByteBlock;1167 1168        /// HWND->HWND__*1169        public System.IntPtr hWndParent;1170 1171        /// DWORD->unsigned int1172        public uint dwWVTUIChoice;1173    }1174 1175    [StructLayout(LayoutKind.Explicit)]1176    internal struct LARGE_INTEGER1177    {1178        /// Anonymous_9320654f_2227_43bf_a385_74cc8c5626861179        [FieldOffset(0)]1180        public Anonymous_9320654f_2227_43bf_a385_74cc8c562686 Struct1;1181 1182        /// Anonymous_947eb392_1446_4e25_bbd4_10e98165f3a91183        [FieldOffset(0)]1184        public Anonymous_947eb392_1446_4e25_bbd4_10e98165f3a9 u;1185 1186        /// LONGLONG->__int641187        [FieldOffset(0)]1188        public long QuadPart;1189    }1190 1191    [StructLayout(LayoutKind.Sequential)]1192    internal struct HWND__1193    {1194        /// int1195        public int unused;1196    }1197 1198    [StructLayout(LayoutKind.Sequential)]1199    internal struct Anonymous_9320654f_2227_43bf_a385_74cc8c5626861200    {

Showing the first 1,200 of 1514 lines. Download the file for the rest.