http://msdn.microsoft.com/en-us/library/ms867088.aspx
PKCS #12 File Types: Portable Protected Keys in .NET (de Michel I. Gallant)

CryptAcquireContext( &m_hProvider, m_wszContainer, AesProviders[m_nIndex].params.lpwsz,
AesProviders[m_nIndex].params.dwType, CRYPT_DELETEKEYSET );
ici aussi http://www.jensign.com/JavaScience/dotnet/PFXOpen/code/PfxOpen.cs

Example C Program: Using CryptAcquireContext
http://msdn.microsoft.com/en-us/library/aa382375(VS.85).aspx

http://www.derkeiler.com/Newsgroups/microsoft.public.platformsdk.security/2005-01/0186.html
CryptAcquireContext with CRYPT_DELETEKEYSET physically deletes the container and all data associated with it, so to say keys, names etc.

http://www.derkeiler.com/Newsgroups/microsoft.public.platformsdk.security/2005-01/0195.html
Some CSPs won’t care, and will let you delete an active container. Others care very much
Even better, since you don’t need to save the keys, use the CRYPT_VERIFYCONTEXT flag on your initial call to CryptAcquireContext — that way it doesn’t create a persisted container at all,

Voir aussi :
http://us.generation-nt.com/removing-private-key-containers-rsa-machinekeys-help-44928792.html
I have done considerable searching and have not found a way to
remove un-needed private key containers from: C:\Documents and Settings\All Users\Application Data \Microsoft\Crypto\RSA\MachineKeys.

CryptAcquireContext flag CRYPT_MACHINEKEYSET: you ned it for machine keys