Windows apps
Collapse the table of content
Expand the table of content
Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

RSACryptoServiceProvider::UseMachineKeyStore Property

 

Gets or sets a value indicating whether the key should be persisted in the computer's key store instead of the user profile store.

Namespace:   System.Security.Cryptography
Assembly:  mscorlib (in mscorlib.dll)

public:
property bool UseMachineKeyStore {
	static bool get();
	static void set(bool value);
}

Property Value

Type: System::Boolean

true if the key should be persisted in the computer key store; otherwise, false.

Setting this property to true is equivalent to passing the UseMachineKeyStore flag to a CspParameters object. The UseMachineKeyStore property applies to all code in the current application domain, whereas the CspParameters object applies only to classes that explicitly reference it. These settings are useful when impersonating or running under an account whose user profile is not loaded. Setting UseMachineKeyStore affects the key store location only if RSACryptoServiceProvider is initialized with no parameters.

The following code example creates an RSACryptoServiceProvider object and sets the static UseMachineKeyStore property to use the machine key store instead of the user profile key store.

using namespace System;
using namespace System::Security::Cryptography;

ref class RSAKeyStoreSample
{
public:
    static void Main()
    {
        // Set the static UseMachineKeyStore property to use the machine key
        // store instead of the user profile key store. All CSP instances not
        // initialized with CspParameters will use this setting.
        RSACryptoServiceProvider::UseMachineKeyStore = true;
        try
        {
            RSACryptoServiceProvider^ RSAalg;

            // This CSP instance will use the Machine Store as set above and is
            // initialized with no parameters.
            RSAalg = gcnew RSACryptoServiceProvider();
            ShowContainerInfo(RSAalg->CspKeyContainerInfo);
            RSAalg->PersistKeyInCsp = false;
            delete RSAalg;

            CspParameters^ cspParams = gcnew CspParameters();

            cspParams->KeyContainerName = "MyKeyContainer";

            // This CSP instance will use the User Store since cspParams are used.
            RSAalg = gcnew RSACryptoServiceProvider(cspParams);
            ShowContainerInfo(RSAalg->CspKeyContainerInfo);
            RSAalg->PersistKeyInCsp = false;
            delete RSAalg;

            cspParams->Flags |= CspProviderFlags::UseMachineKeyStore;

            // This CSP instance will use the Machine Store. Although cspParams are used,
            // the cspParams.Flags is set to CspProviderFlags.UseMachineKeyStore.
            RSAalg = gcnew RSACryptoServiceProvider(cspParams);
            ShowContainerInfo(RSAalg->CspKeyContainerInfo);
            RSAalg->PersistKeyInCsp = false;
            delete RSAalg;
        }
        catch (CryptographicException^ e)
        {
            Console::WriteLine("Exception: {0}", e->GetType()->FullName);
            Console::WriteLine(e->Message);
        }
    }

    static void ShowContainerInfo(CspKeyContainerInfo^ containerInfo)
    {
        String^ keyStore;

        Console::WriteLine();
        if (containerInfo->MachineKeyStore)
        {
            keyStore = "Machine Store";
        }
        else
        {
            keyStore = "User Store";
        }
        Console::WriteLine("Key Store:     {0}", keyStore);
        Console::WriteLine("Key Provider:  {0}", containerInfo->ProviderName);
        Console::WriteLine("Key Container: \"{0}\"", containerInfo->KeyContainerName);
        Console::WriteLine("Generated:     {0}", containerInfo->RandomlyGenerated);
        Console::WriteLine("Key Nubmer:    {0}", containerInfo->KeyNumber);
        Console::WriteLine("Removable Key: {0}", containerInfo->Removable);
    }
};

int main()
{
    RSAKeyStoreSample::Main();
}

.NET Framework
Available since 1.1
Windows Phone Silverlight
Available since 7.1
Return to top
Show:
© 2017 Microsoft