title: What exactly happens when I set LoadUserProfile of IIS pool?
body: <p>I faced the following issue.</p>
  
  <p>I run the following code</p>
  
  <pre><code>var binaryData = File.ReadAllBytes(pathToPfxFile);
  var cert = new X509Certificate2(binaryData, password);
  </code></pre>
  
  <p>in two processes. One of the processes runs under <code>LOCAL_SYSTEM</code> and there this code succeeds. Another one runs inside IIS under a local user account belonging to "Users" local group and there I get the following exception:</p>
  
  <pre><code>System.Security.Cryptography.CryptographicException
  Object was not found.
  at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
  at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle&amp; pCertCtx)
  at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
  at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password)
  //my code here
  </code></pre>
  
  <p>So I Googled a bit and found <a href="https://stackoverflow.com/a/10048789/57428">this answer</a> to a kind of similar question. I tried to enable <code>LoadUserProfile</code> for the application pool and it works now.</p>
  
  <p>The problem is I don't get what exactly happens when I set <code>LoadUserProfile</code> and what consequences that might have. I mean if it's a "good" thing then why it is not "on" by default and why is it there after all?</p>
  
  <p>What exactly happens when I set <code>LoadUserProfile</code> in IIS pool and what negative consequences can it have?</p>