Esempio n. 1
0
        public String[] EnumKeys(Boolean machineKeyFlag = false)
        {
            UInt32 dwFlags = NCRYPT_SILENT_FLAG;

            if (machineKeyFlag)
            {
                dwFlags |= NCRYPT_MACHINE_KEY_FLAG;
            }

            List <String> keyNames  = new List <String>();
            IntPtr        enumState = IntPtr.Zero;

            while (true)
            {
                IntPtr keyDataPtr = IntPtr.Zero;
                UInt32 hr         = NCryptEnumKeys(hProvider, null, ref keyDataPtr, ref enumState, dwFlags);
                if (hr == NTE_NO_MORE_ITEMS)
                {
                    break;
                }
                else if (hr != ERROR_SUCCESS)
                {
                    throw new Win32Exception("NCryptEnumKeys failed.");
                }
                NCryptKeyName keyData = (NCryptKeyName)Marshal.PtrToStructure(keyDataPtr, typeof(NCryptKeyName));
                keyNames.Add(keyData.pszName);
                if (NCryptFreeBuffer(keyDataPtr) != ERROR_SUCCESS)
                {
                    throw new Win32Exception("NCryptFreeBuffer failed.");
                }
            }
            return(keyNames.ToArray());
        }
Esempio n. 2
0
 /// <summary>
 /// Opens a key that exists in the specified CNG key storage provider.
 /// </summary>
 /// <param name="provider">The handle of the key storage provider to open the key from.</param>
 /// <param name="keyName">The description of the key to open.</param>
 /// <returns>
 /// A pointer to a NCRYPT_KEY_HANDLE variable that receives the key handle. When you have finished using this handle, release it by calling its <see cref="SafeHandle.Dispose()"/> method.
 /// </returns>
 public static SafeKeyHandle NCryptOpenKey(SafeProviderHandle provider, NCryptKeyName keyName)
 {
     return(NCryptOpenKey(provider, keyName.Name, keyName.dwLegacyKeySpec, (NCryptOpenKeyFlags)keyName.dwFlags));
 }
Esempio n. 3
0
 public static extern unsafe SECURITY_STATUS NCryptEnumKeys(
     SafeProviderHandle hProvider,
     string pszScope,
     out NCryptKeyName* ppKeyName,
     ref void* ppEnumState,
     NCryptEnumKeysFlags dwFlags = NCryptEnumKeysFlags.None);